Что должен знать каждый программист JavaScript? [закрыто]

368

Есть ли ряд вещей, которые должен знать каждый программист JavaScript, чтобы иметь возможность сказать «Я знаю JavaScript»?

gath
источник

Ответы:

590

Не JQuery. Не YUI. Не (и т. Д. И т. П.)

Фреймворки могут быть полезны, но они часто скрывают некрасивые детали того, как на самом деле работают JavaScript и DOM от вас. Если ваша цель - сказать «Я знаю JavaScript», то мы тратим на это много времени.

Вот некоторые особенности языка JavaScript, которые вы должны знать, чтобы понять, что он делает, и не быть пойманными, но которые не сразу очевидны для многих людей:

  • Это object.propи object['prop']то же самое (так что вы можете перестать использовать eval, спасибо); свойства объекта всегда являются строками (даже для массивов); что for... inдлячто это не так ).

  • Недвижимость обнюхивать; что undefinedесть (и почему пахнет ); почему, казалось бы, малоизвестный inоператор выгоден и отличается от typeof/ undefinedпроверок; hasOwnProperty; цель delete.

  • Что Numberтип данных действительно является плавающим; не зависящие от языка трудности использования поплавков; избегая parseIntвосьмеричной ловушки.

  • Определение вложенной функции; необходимость использования varв области, которую вы хотите, чтобы избежать случайных глобалов; как можно использовать прицелы для укупорки; проблема петли закрытия .

  • Как глобальные переменные и windowсвойства сталкиваются; как глобальные переменные и элементы документа не должны сталкиваться, а происходят в IE; необходимость использования varв глобальном масштабе, чтобы избежать этого.

  • Как functionоператор действует, чтобы « поднять » определение перед кодом, предшествующим ему; разница между функциональными операторами и функциональными выражениями; почему выражения именованных функций не должны использоваться .

  • Как действительно работает конструктор, prototypeсвойство и newоператор; методы использования этого для создания нормальной системы класса / подкласса / экземпляра, которую вы на самом деле хотели; когда вы можете захотеть использовать объекты на основе замыкания вместо прототипирования. (Большинство учебного материала по JS абсолютно ужасны по этому поводу; мне потребовались годы, чтобы разобраться в этом.)

  • Как thisопределяется во время разговора, не связано; следовательно, передача методов не работает так, как вы ожидаете от других языков; как замыкания или Function#bindмогут быть использованы, чтобы обойти это.

  • Другое ECMAScript Fifth Edition функции , такие как indexOf, forEachи функционально-программные методы наArray ; как исправить старые браузеры, чтобы их можно было использовать; используя их со встроенными выражениями анонимных функций, чтобы получить компактный, читаемый код.

  • Поток управления между браузером и кодом пользователя; синхронное и асинхронное выполнение; события, которые возникают внутри потока управления (например, фокус), против событий и тайм-аутов, которые происходят, когда управление возвращается; как вызов якобы синхронного встроенного типа alertможет привести к потенциально катастрофическому повторному входу.

  • Как влияет межоконный сценарий instanceof; как межоконный сценарий влияет на поток управления различными документами; как postMessageнадеюсь это исправить.

Смотрите этот ответ относительно последних двух пунктов.

Прежде всего, вы должны критически относиться к JavaScript, признавая, что по историческим причинам он является несовершенным языком (даже больше, чем большинство языков), и избегая его наихудших проблем. Работы Крокфорда в этой области определенно заслуживают прочтения (хотя я не на 100% согласен с ним в том, что такое «хорошие роли»).

bobince
источник
80
Аааа, наконец, вдумчивый, тщательный ответ. Если бы я мог +10, я бы. Знание фреймворка не означает, что вы можете эффективно программировать JavaScript.
Тим Даун
6
Большое спасибо за этот хорошо продуманный ответ. Я хотел бы добавить, что использование фреймворка может быть очень полезным, если вы знаете, как это делается. Вы должны научиться делать эти вещи самостоятельно, прежде чем прибегать к фреймворку.
Хавьер Парра
4
@ Даниель: на самом деле это не так, он thisзависит от того, как вы к нему обращаетесь . Попробуйте: var o= {b: function(){alert(this===o);}};тогда o['b']();-> true. И если вы хотите действительно причудливый, (o['b'])()-> true, но (c= o['b'])()-> false, и только в Mozilla, (true? o['b'] : null)()-> true. W, T, и действительно, F.
bobince
7
Что за черепок! Это не значит, что знание различных особенностей браузера делает вас лучшим JS-программистом. Может быть, больше уличного доверия среди ваших коллег ... Абстракции делают жизнь проще и являются неотъемлемой частью JS, поэтому я бы сказал, что знание фреймворка делает вас лучшим JS-программистом, чем тот, кто этого не хочет и хочет делать что-то долгое время.
Винс Пануччо
19
Сэр Психо: обратите внимание, что ни в одном из этих ответов не упоминается DOM, и именно в этом вам помогут большие библиотеки. Фреймворк не может защитить вас от любых вещей, упомянутых здесь . Этот материал важен для тех, кто делает скрипты браузера, использует фреймворк или нет.
Тим Даун
248

Это можно отключить.

graphicdivine
источник
12
+1, я так устал от страниц, которые даже не волнуют даже самые основы изящной деградации, потому что «это так сложно, и у всех в любом случае включен javascript».
wasatz
27
+1. Страница, которая не работает без JavaScript - это страница, которая будет хрупкой даже при включенном JS.
bobince
9
@iconiK Я просто пойду и расскажу всем своим правительственным клиентам, у которых JavaScript отключен на глобальном уровне по соображениям безопасности, что они все идиоты, не так ли?
graphicdivine
16
-1 это не по теме и не имеет никакого отношения к знанию javascript как языка. Это полезно учитывать при разработке веб-приложения, но это еще не тот ответ, который относится к этой теме.
ТМ.
24
@ ТМ, нет, это действительно важное соображение. Это должно быть в центре вашего внимания, когда вы проверяете значения перед тем, как вставить их в базу данных, или у вас есть единственный способ войти на ваш сайт через причудливое всплывающее окно JavaScript. Кстати говоря ... Я думаю, мне нужно кое-что проверить.
Элизабет Баквалтер
75

Понимание материала, написанного в Javascript Крокфорда : «Хорошие части», является довольно хорошим предположением, что человек является достойным программистом JS.

Вы можете в значительной степени знать, как использовать хорошую библиотеку, такую ​​как JQuery, и все еще не знать скрытые части Javascript.

Еще одно замечание - инструменты отладки в различных браузерах. Программист JS должен знать, как отлаживать свой код в разных браузерах.

Ой! И зная, что JSLint полностью обидит ваши чувства !!

бронза
источник
+1 Продолжайте забывать об этой книге, отличная рекомендация.
Дэвид
8
На developer.yahoo.com/yui/theater также есть много поучительных и проницательных видеороликов о Крокфорде - и я думаю, что мне не нужно упоминать crockfordfacts.com :-)
ndim
+1 - JSLint - замечательная вещь, когда вы пытаетесь разработать JS для фреймворка, который не имеет встроенной поддержки отладки ( кашляю Siebel, кашляю PDF).
Дж. Полфер
49

Если вы хотите быть настоящим ниндзя JavaScript, вы должны знать ответы на все вопросы в Совершенстве убивает JavaScript Quiz .

Пример для разжигания аппетита:

(function f(f){ 
  return typeof f(); 
})(function(){ return 1; });

Что возвращает это выражение?

  • "число"
  • «Неопределенный»
  • «Функция»
  • ошибка
Skilldrick
источник
10
Посмотрите мои ответы: codingspot.com/2010/02/…
CMS
@CMS Очень хорошо! У вас действительно все получилось с первого раза, или это включает в себя некоторые исследования?
Skilldrick
7
Skilldrick: Я думаю, что я получил их все в первый раз, я частый читатель стандарта ECMA-262 (я знаю, я урод :-)
CMS
46

Вы не знаете JavaScript, если не знаете:

  1. Затворы
  2. Основанное на прототипе наследование
  3. Шаблон модуля
  4. W3C-DOM
  5. Как работают события
Эдвин
источник
Мне очень нравится этот ответ. Это поможет вам обнаружить темные области в ваших знаниях. События - это единственное, что мне до сих пор немного неясно в этом контрольном списке (если шаблон модуля означает «не затирайте глобальное пространство имен» и, следовательно, включает области действия и оператор var).
Сильвиот
11
Я бы сказал , что You don't know JavaScript if you don't know The W3C-DOM. Две вещи разные.
gblazex
37

..это javascript это не java :)

Многие, многие люди, начинающие с разработки сайтов, говорили мне, что javascript - это просто java!

Срипати Кришнан
источник
+1 Этот пункт довольно принципиален!
Амельвин
71
«JavaScript для Java, как ковер для автомобиля».
Джош Ли
1
Javascript примерно так же похож на Java, как C # похож на C. Конечно, там синтаксис выглядит примерно одинаково, но сильно отличается.
Эрлз
4
если они не используют Google Web Toolkit
Afriza N. Arief
Интересно, что Microsoft основывала функции даты, совместимые с Y2k, в JScript для IE3 на java.util.Date.
Баярд Рандель
27
  1. Ознакомьтесь с хотя бы одной библиотекой Javascript (Jquery, Prototype и т. Д.).

  2. Узнайте, как использовать инструменты отладки основных браузеров (MSIE 7-8, Firefox, Chrome, Safari)

  3. Читайте об индустрии: сайт Дугласа Крокфорда - это сокровище, а Ajaxian.com - хороший блог, чтобы следить за новыми, интересными или странными идеями для Javascript. Есть ряд других ресурсов, но это те, которые помогли мне больше всего.

Дэвид
источник
Серьезно, почему голосование против?
Дэвид
+1 Слишком много тактического голосования, серьезно люди должны просто отстаивать хорошие ответы, а не просто пытаться навязать свой ответ на вершину.
Амельвин
1
@Murali VP Я сделал предположение, что Javascript «знаком» в контексте браузеров. Сразу после некоторого эквивалента hello world вам нужно будет выяснить свои логические ошибки и ошибки времени выполнения, которые могут различаться в зависимости от интерпретатора. Я бы не стал утверждать, что знаю какой-либо язык, если бы не знал, как его отлаживать. Что касается требования к структуре, Javascript похож на ранний C, где тонкие различия в реализации саботируют неосторожных; jQuery и prototypejs скрывают эти различия и делают Javascript надежным инструментом, добавляя дополнительные вызовы API для повышения производительности. (продолжение)
Дэвид
@Murali VP Честно говоря, Javascript прошел долгий путь с тех пор, как я начал использовать его в 90-х годах, и, за исключением Microsoft, другие интерпретаторы Javascript проделали впечатляющую работу, чтобы подчиняться спецификациям и вести себя честно.
Дэвид
@ Дэвид спасибо за хорошее объяснение. Склонен соглашаться с вами.
Мурали вице-президент
24

Javascript объекты и функции в качестве первого класса гражданина , обратных вызовов , чтобы не забыть о событиях , а затем JQuery .

сарфраз
источник
20
Ах, JQuery, сверхрасширенный фреймворк JS!
Мурали В.П.
24

Этот Javascript - это не то, что можно узнать за час!

Ashwin Prabhu
источник
4
но это, кажется, популярное убеждение
Ливингстон Сэмюэль
23

Переменные являются глобальными, если они не объявлены как локальные !!

Плохо (DoSomething () вызывается только 10 раз):

function CountToTen()
{
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();

Хорошо (DoSomething () вызывается 50 раз, как и предполагалось):

function CountToTen()
{
  var i;
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  var i;
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();
theycallmemorty
источник
2
Я никогда не думал об этом. Очень хороший момент.
оливковое
6
Я пытаюсь привыкнуть ко for (var i=0;всем своим петлям
ghoppe
2
Крокфорд предпочитает ставить varверхнюю часть функции, потому что она не обманывает вас относительно размера области видимости переменной. js2-modeбудет жаловаться, если вы находитесь var iв двух отдельных forциклах в одной и той же функции, поскольку она предполагает, что вы думаете, что у вас есть две отдельные переменные, а вы нет. Тем не менее, я стараюсь никогда не varотделять вещи от того, где я их инициализирую.
Краген Хавьер Ситакер
Мне все равно, если он не ограничен. Я терпеть не могу иметь переменную, объявленную 20 строк, прежде чем она будет использована
Хуан Мендес
8

Для того, чтобы знать, что Javascript изначально назывался LiveScript, а префикс «Java» был прикреплен в маркетинговых целях, а не потому, что Java и Javascript связаны между собой (а это не так).

Да, и за то, что вы владеете любой версией «Javascript: Полное руководство» Дэвида Фланагана (эта информация на странице 2).

... и за то, что высоко оценили тех, кто пытался запутать документ Internet Explorer 4 document.all [] и Netscape Navigator 4 document.layers [] до того, как подобные Jquery убрали боль.

РЕДАКТИРОВАТЬ:

Как отмечает @Kinopiko, JavaScript изначально назывался проектом Mocha ( некоторые источники также считают, что он назывался проектом LiveWire), но общепринято, что язык (написанный Бренданом Эйхом) планировалось выпустить как LiveScript до того, как префикс Java был принят на выпуск в начале 1996 года.

оборота амельвин
источник
+1 за выбор синиц Дугласа Крокфорда!
Гат
1
Я думал, что JavaScript изначально назывался мокко?
1
@Kinopiko Согласно моей книге Дэвида Фланагана «Javascript: The Definition Guide» (июнь 1998 года), она называлась LiveScript.
Амельвин
@gath День, когда ты учишься, хороший день!
Амельвин
1
@amelvin Каждый день - школьный день.
полковник Спонс
8

Нужно знать о следующем, чтобы сказать «Я знаю JavaScript»:

  1. JavaScript это хорошо, но DOM - это больно
  2. Кросс-браузерные проблемы могут заставить вас сойти с ума
  3. Если код не протестирован как минимум в 4 разных хороших браузерах, вы не можете сказать, что он не содержит ошибок
  4. Закрытие .............. Должен знать
  5. Его основанный на прототипе ........... Хороший, интересно узнать это
  6. ключевое слово отладчика ..... помогает в кризис
Анил Намде
источник
Хороший список, довольно тонкий. Я посмеялся над "4" хорошими браузерами. :) Я думаю, что номер 7 должен быть здоровой ненавистью для браузеров IE в версии 8.
Shyam
@ Шим, с чего ты взял, что у нас не должно быть здоровой ненависти к IE8? У меня все еще есть проблемы в IE8 ... проблемы, которые есть только в IE8.
Tracker1
@ Tracker1: всегда будут проблемы. И ломать браузер я не трогал, ну, это было бы немного несправедливо. Вот почему я смеялся над 4 хорошими браузерами: «Firefox, Chrome, Safari и Opera» - единственные, для которых я разрабатываю. Я прекратил взламывать IE, я просто заставляю его запускать код Fisher Price, как будто JavaScript будет отключен.
Shyam
7

Этот JavaScript намного отличается от других языков, чем вы думаете. Посмотрите этот великолепный Google Tech Talk, чтобы получить впечатление: http://www.youtube.com/watch?v=hQVTIJBZook

ericteubert
источник
1
+1 Это отличное объяснение того, как прекратить сосать JavaScript. Это стоит посмотреть потом: yuiblog.com/crockford
полковник Спонс
Еще одна хорошая презентация Crockfod («Язык программирования JavaScript», 4 части) video.yahoo.com/watch/111593/1710507
Алекс К.
7

Что должен знать каждый кодировщик javascript?

Как насчет, я могу отключить ваши усилия в 2 клика. Так что предоставьте запасной вариант, если это возможно.

Khainestar
источник
Вы также можете удалить свой веб-браузер. В наши дни очень мало людей, которые отключают JavaScript. Тем, кому это возможно, не нужно просматривать веб-страницы. Единственным исключением является то, что веб-сканерам необходим доступ к общедоступному контенту, и он не может полагаться на JS.
Жан Винсент
Я больше заинтересован в предоставлении не-JS способов доступа к вещам. Я знаю людей, которые просматривают с отключенным JS, или используют программы чтения с экрана. Они не всегда хорошо играют с JS. Я видел сайты, на которых через ajax отправляется простая страница входа без каких-либо последствий. Нет JS, нет логина. Сайт даже не использует много JS, только для отправки форм.
Хайнестар
Я считаю, что пользователи, которые намеренно отключают JS, как вы и предполагали, сегодня очень редки, конечно, намного меньше, чем 10 лет назад. Вот почему я не понимаю, почему мы должны разрабатывать сайт дважды для людей, которые просто не хотят вообще посещать ваш сайт. Так что в вашем примере они не могут войти, и что? Другое дело, что совершенно невозможно разработать современный сайт без JS.
Жан Винсент
6

Вы знаете javascript, если вы можете эффективно использовать Array, Number, String, Date и Object. Плюс очки по математике и регэкспу. Вы должны уметь писать функции и использовать переменные (в правильной области видимости, то есть как «методы» объекта).

Я вижу некоторые комментарии о знании замыканий, экстравагантный синтаксис функций, блабла. Все это не имеет отношения к этому вопросу. Это все равно что сказать, что вы бегун, если вы можете пробежать 100 м за 11 секунд.

Я говорю, что может понадобиться несколько недель, чтобы стать опытным в JavaScript. После этого требуются годы, десятки книг и тысячи строк программирования, чтобы стать экспертом, ниндзя и т. Д.

Но это был не вопрос.

О, и DOM не является частью javascript и jQuery. Поэтому я думаю, что оба вопроса в равной степени не имеют отношения к этому вопросу.

Михель ван дер Блонк
источник
1
Закрытие есть, заботишься ли ты об этом или нет. Это мощный, но может легко использоваться неправильно. Вы не знаете язык, если не знаете, как он работает.
gblazex
Помимо вреда, который могут вызвать замыкания, такие как утечки памяти, особенно у нашего настоящего друга Internet Explorer 6.
Марсель Корпель,
4

Прочитав все вышесказанное, это также прекрасно , чтобы узнать Javascript с помощью такой структуры , как JQuery. По правде говоря, это первый способ, которым многие люди подняли JS. В этом нет ничего постыдного.

Суп
источник
4

массив . lengthМетод - это не количество элементов массива, а самый высокий индекс. даже когда элемент был установлен наundefined

var a = [];
a.length;   // === 0
a[10];      // === undefined
a[10] = undefined;
a.length;   // === 11
a.pop();    // === undefined
a.length;   // === 10

это поведение едва ли можно отличить от ошибки в дизайне языка.

оборота михал
источник
3

JQuery будет моей лучшей рекомендацией. Не только для самого кода, но и идиома, стиль, мышление, стоящее за ним, наиболее достойны эмуляции.

duffymo
источник
2
+1 Jquery произвел революцию в моем использовании javascript.
Амельвин
1
Хороший аргумент наброски. Расширение сделало бы это отличным ответом.
Donal Fellows
JQuery заставляет вас перейти в процедурный режим. Я скорее пишу OO JS
Хуан Мендес
В объектной ориентации нет ничего волшебного. Я бы лучше использовал фреймворк, разработанный Джоном Резигом и используемый тысячами других разработчиков, чем все, что вы или я бы написали, независимо от режима.
duffymo
3

Этот javascript является наиболее широко распространенным языком в мире. (Вероятно)

ZAF
источник
8
Наиболее широко распространенным родным естественным языком является мандарин. Знание этого сделает вас говорящим на мандарине? Будет ли знание этого факта иметь какое-либо отношение к вашему пониманию языка?
Зано
11
Наиболее широко распространенным языком в мире является генетический код ДНК, который контролирует синтез белка в клетках.
Эрнелли
Прежде чем Мандарин и ДНК, язык Любви должен быть сначала развернут: таким образом, он побеждает. BAM!
Кристофер
3

Очень хорошее изучение языка и понимание его различных особенностей происходит из (многолетнего) опыта. Если вы хотите стать лучшим программистом, я бы сказал, понимая шаблоны проектирования, как и когда их использовать и / или даже когда вы их используете, не осознавая этого; техническая архитектура и пользовательский опыт.

Знание языка (JavaScript) означает, что вы можете выбрать любой фреймворк и использовать его по своему желанию. Вам неизбежно придется погрузиться в исходный код, и если все, что вы знаете, это синтаксис фреймворка или 2 или 3, то вы не будете далеко ходить. Сказать, что получение исходного кода нескольких различных фреймворков, вероятно, является одним из лучших способов увидеть, как можно использовать JavaScript. Поработайте, просматривая код в Firebug или Web Inspector, а затем проверяя документацию JavaScript, особенно документы Mozilla и Webkit, чтобы получить более полное представление о том, на что вы смотрите.

Понимая разницу между объектно-ориентированным и функциональным программированием, JavaScript - это привлекательное сочетание двух, а также того, когда и как использовать и то, и другое для создания потрясающей кодовой базы и потрясающих приложений, сделает вас лучшим программистом JavaScript.

Простое чтение некоторых книг, особенно «хороших частей» Крокфорда, в которых просто представлено его мнение о том, что хорошо в JavaScript, при этом пропуская большинство УДИВИТЕЛЬНЫХ частей JavaScript, может привести вас в замешательство.

Проверка кода, написанного кем-то вроде Томаса Фукса, с другой стороны, даст вам гораздо больше понимания возможности написания удивительного и эффективного JavaScript.

Попытка запомнить несколько ошибок или WTF не очень поможет, вы поймете это, если начнете кодировать и проходить код библиотеки / фреймворков, особенно с комментариями, чтобы понять, почему они использовали определенные свойства / значения, а не другие, почему и когда хорошо использовать определенные операнды и операторы, все это есть в коде, который используют люди фреймворка. Как лучше, чем учиться на примере? : ^)

Кристос Констандину
источник
+1 за то, что не поклонялся Крокфорду. Я отношусь к его взглядам так же, как проповедник в церкви. Я уважаю то, что они говорят, но принимаю все это с небольшим количеством соли.
Хуан Мендес
2

В Javascript производительность имеет значение.

Не существует интеллектуального компилятора для оптимизации вашего кода, поэтому вы должны быть более осторожны при написании кода JavaScript, чем такие языки, как C #, Java ...

caltuntas
источник
1
Фактически, браузерные компиляторы очень хорошо оптимизируют ваш код.
Эдуардо
1
Chrome очень умный в оптимизации вашего кода, этот ответ просто не соответствует всем новым движкам JS
Хуан Мендес
А как насчет IE, мобильных браузеров?
Кальтунтас
1

объектные литералы, потому что их так приятно писать.

пу
источник
0
  1. Зная, что есть жизнь с и без, with()и где провести черту.
  2. Вы можете создавать собственные ошибки с помощью throwоператора, чтобы преднамеренно остановить выполнение Javascript.
оборота FK82
источник
-1

JavaScript не поддерживает разделение возврата ключевого слова и оператор возврата с символом новой строки , как следующий код (или попробовать его на моей странице jsFiddle )

function foo()
{
    return
    {
        bar: 'something'
    };
}

$(function()
{
    document.write(foo());
});

Я не понимаю, почему JavaScript не поддерживает этот стиль, потому что намного проще читать очень сложный исходный код JavaScript, если сравнивать со стилем JavaScript по умолчанию.

PS. Я написал JavaScript почти 6 лет. Но я только что обнаружил эту ошибку при попытке выполнить следующую функцию. Всегда возвращает undefined. Когда я использую отладчик и вхожу в эту функцию, все работает нормально. Я думаю, что это должно быть худшей ошибкой программирования в моей жизни.

function JqGridInlineEditor_GenerateTool(cellvalue, options, rowObject, disableEdit, disableDelete)
{
    return 
        (!disableEdit ? '<a class="button edit" href="javascript: void(0);" onclick="JqGridInlineEditor_EditRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Edit.gif'), 'Click here to Edit or \nDouble-click row to edit.') : '') +
        (!disableDelete ? '<a class="button delete" href="javascript: void(0);" onclick="JqGridInlineEditor_DeleteRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Delete.png'), 'Click here to Delete or \nSelect row and then press Delete') : '') +
        (!disableEdit ? '<a class="button save" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_SaveRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Save.png'), 'Click here to Save or \nPress Enter') : '') +
        (!disableEdit ? '<a class="button cancel" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_RestoreRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Cancel.png'), 'Click here to Cancel or \nPress Esc') : '');
}
Soul_Master
источник
3
В JavaScript символы новой строки обычно действуют как разделители операторов; только когда это невозможно, оператор заканчивает (например, var foo = "bar" +читает) анализатор.
Марсель Корпель
Еще один jsFiddle. jsfiddle.net/Soul_Master/BxrDJ
Soul_Master
2
@ Марсел - Это не совсем так; например, две строки , var foo = 5и -1;приведет к Foo, установленным на 4, хотя каждый уважительных заявления сами по себе.
Бен Бланк
4
Это связано с тем, что язык автоматически вводит точки с запятой в отдельные операторы. Это гоча с языком. Ваш оператор возврата преобразуется в это: return; {key: value,} Чтобы избежать этой проблемы, вы должны принять практику, заключающую точку с запятой в одну и ту же строку, например: return {key: value}; Также сделайте себе одолжение и возьмите копию Дугласа Крокфорда: Хорошие части. Это четко указано в книге.
Раджат
@Ben - Интересный случай, спасибо за указание на это. Тем не менее, я бы порекомендовал не полагаться на эти крайние случаи и просто помещать все в одну строку, заканчивающуюся точкой с запятой, и размещать ваш код в нескольких строках только тогда, когда строка заканчивается чем-то, чем не может закончиться оператор или выражение. ,
Марсель Корпель
-3

Поскольку JS является функциональным языком, порядочный JS-программист должен уметь писать Y-комбинатор и объяснять, как он работает на пределе возможностей.

user187291
источник
1
Что плохого в том, что я могу писать Y-комбинатор? И да, JavaScript - это функциональный язык. Если вы хотите сказать, что «знаете javascript», необходимо хорошее понимание функционального программирования.
Райнос
C также может использоваться как функциональный язык.
kzh
Я недавно прочитал о Y-комбинаторе, понимаю, как он работает и в каких случаях его можно использовать ... но так и не нашел случая, когда я не смог бы переписать проблему, чтобы не нуждаться в Y-комбинаторе.
Эверт
-5

... о Google Web Toolkit , что означает, что ваш проект javascript, вероятно, мог бы быть разработан более удобным способом.

Виктор Сер
источник
2
GWT - это на самом деле не JavaScript, а Java-способ написания JavaScript.
Ливингстон Самуэль
... и каждый программист Javascipt должен знать об этом.
Виктор Сер
что ваш проект javascript, вероятно, может быть разработан более удобным способом.
Виктор Сер
6
Я думаю, что с Javascript легче иметь дело, чем с Java, лично.
timw4mail