Що повинен знати кожен програміст JavaScript? [зачинено]


368

Чи існує набір речей, які повинен знати кожен програміст JavaScript, щоб він міг сказати "Я знаю JavaScript"?

Відповіді:


590

Не jQuery. Не ЮІ. Не (тощо)

Рамки можуть бути корисними, але вони часто приховують іноді некрасиві деталі того, як 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% згоден з ним щодо того, які «хороші частини»).


80
А-а-а, нарешті продумана, ретельна відповідь. Якби я міг +10, я б. Знання фреймворку не означає, що ви можете ефективно програмувати JavaScript.
Тім Даун

6
Велике спасибі за цю добре продуману відповідь. Я хотів би додати, що використання рамки може бути дуже корисним, якщо ви знаєте, як це робиться. Вам слід навчитися робити ці речі самостійно, перш ніж вдаватися до рамки.
Хав'єр Парра

4
@Daniel: насправді це не так, 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

Щоб його можна було відключити.


12
+1, я настільки втомився від сторінок, що навіть не турбує навіть самі основи витонченої деградації, оскільки "це так важко, і всім увімкнено JavaScript."
wasatz

27
+1. Сторінка, яка не працює без JavaScript, це сторінка, яка буде неміцною навіть із включеним JS.
bobince

9
@iconiK Я просто поїду і скажу всім моїм урядовим клієнтолам, у яких глобально відключений JavaScript з міркувань безпеки, що вони всі дебіли, чи не так?
graphicsdivine

16
-1 це поза темою і насправді не має нічого спільного з знанням JavaScript як мови. Це добре враховувати при розробці веб-програми, але це все ще не відповідь, що належить до цієї теми.
ТМ.

24
@TM, ні, це дійсно важливий розгляд. Це повинно стояти перед вашими думками, коли ви перевіряєте значення, перш ніж вставляти їх у базу даних або мати єдиний спосіб увійти на свій веб-сайт через вигадливе спливаюче вікно javascript. Якщо говорити про який .... я думаю, мені потрібно щось піти перевірити.
Елізабет Баквальтер

75

Розуміння речей, написаних у Jackster Crockford : The Good Parts - це досить гарне припущення, що людина є гідним програмістом JS.

Ви майже можете знати, як використовувати гарну бібліотеку, як JQuery, і досі не знаєте прихованих частин Javascript.

Ще одна примітка - інструменти налагодження в різних браузерах. Програміст JS повинен знати, як налагодити свій код у різних браузерах.

Ой! А знання JSLint повністю зашкодить вашим почуттям !!


+1 Продовжуйте забувати про цю книгу, відмінна рекомендація.
Девід

8
Також на developer.yahoo.com/yui/theater є багато повчальних та проникливих відео про Крокфорд - і я думаю, що мені не потрібно згадувати crockfordfacts.com :-)
ndim

+1 - JSLint - чудова річ, коли ви намагаєтеся розробити JS для рамки, яка має нульову підтримку налагодження ( кашель Siebel, PDF-файли щодо кашлю ).
Дж. Полфер

49

Якщо ви хочете бути справжнім ніндзя JavaScript, вам слід знати відповіді на кожне запитання у вікторині « Вдосконалення вбиває JavaScript» .

Приклад, який може підвищити апетит:

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

Що повертає цей вираз?

  • "Число"
  • "Невизначений"
  • "Функція"
  • Помилка

10
Подивіться на мої відповіді: codingspot.com/2010/02/…
CMS

@CMS Дуже добре! Ви насправді отримали все в порядку, чи це включає деякі дослідження?
Skilldrick

7
Skilldrick: Я думаю, що я їх все отримав спочатку, я часто читаю Стандарти ECMA-262 (я знаю, я виродник :-)
CMS

46

Ви не знаєте JavaScript, якщо не знаєте:

  1. Закриття
  2. Наслідування на основі прототипу
  3. Шаблон модуля
  4. W3C-DOM
  5. Як працюють події

Мені дуже подобається ця відповідь. Це допомагає вам помітити темні ділянки у своїх знаннях. Події - це єдине, що мені ще трохи невідоме в цьому контрольному списку (якщо шаблон модуля означає "не зациклюйтеся на глобальному просторі імен" і так включає області дії та оператор var).
silviot

11
Я б це заперечував You don't know JavaScript if you don't know The W3C-DOM. Дві речі різні.
gblazex

37

..то JavaScript не є Java :)

Багато, багато людей, починаючи з розробки веб-сайтів, сказали мені, що JavaScript - це просто проста Java!


+1 Цей пункт є досить принциповим!
amelvin

71
"JavaScript - це Java, як килим - це машина".
Джош Лі

1
Javascript настільки ж схожий на Java, як C # схожий на C. Звичайно, там синтаксис схожий на щось подібний, але спосіб відрізняється.
Earlz

4
якщо вони не використовують веб-інструментарій Google
Афріза Н. Короткий

Цікаво, що Microsoft базувала функції, що відповідають сумісності Y2k, у JScript для IE3 на java.util.Date.
Байард Рендел

27
  1. Ознайомтеся з принаймні однією бібліотекою Javascript (Jquery, Prototype тощо).

  2. Дізнайтеся, як користуватися інструментами налагодження основних браузерів (MSIE 7-8, Firefox, Chrome, Safari)

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


Серйозно, чому голосування проти?
Девід

+1 Занадто багато тактичного голосування, серйозно люди повинні просто підтримувати хороші відповіді, а не просто намагатися підкреслити свою відповідь до вершини.
amelvin

1
@Murali VP Я зробив припущення про "відомий" Javascript у контексті браузерів. Одразу після деякого еквівалента привітного світу вам знадобиться з'ясувати свої логічні помилки та помилки виконання, які можуть бути різними для кожного перекладача. Я б не стверджував, що знаю будь-яку мову, якби не знав, як її налагодити. Що стосується рамкової вимоги, то Javascript на зразок раннього C, де тонкі відмінності в реалізації будуть саботувати необережне; jQuery і прототипи обробляють ці відмінності і роблять Javascript надійним інструментом, додаючи додаткові виклики API для підвищення продуктивності. (продовження)
Девід

@Murali VP Щоб бути справедливим, Javascript пройшов довгий шлях, оскільки я почав використовувати його в 90-х, і за винятком Microsoft, інші інтерпретатори Javascript зробили вражаючу роботу, щоб підкорятися специфікаціям та грати на справедливість.
Девід

@David дякую за приємне пояснення. Схильний погодитися з тобою.
Murali VP

24

Об'єкти Javascript і функціонують як першокласні громадяни , зворотні дзвінки , щоб не забувати про події, а потім і JQuery .


20
Ах jQuery, переохолоджена рамка JS!
Murali VP


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();

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 для документа.all [] та Netscape Navigator 4's document.layers [], перш ніж подібності до Jquery зняли біль.

Редагувати:

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


+1 для вибору біт синиці від Дугласа Крокфорда!
гет

1
Я думав, що JavaScript спочатку називався Mocha?

1
@Kinopiko Відповідно до моєї книги "Javascript: Поточний посібник" 3еді (червень 1998 року) Девіда Фланагана, її називали LiveScript.
amelvin

@gath День, коли ви щось дізнаєтесь - це добрий день!
amelvin

1
@amelvin Кожен день - шкільний день.
Полковник Спонш

8

Слід знати про таке, щоб сказати "Я знаю JavaScript":

  1. JavaScript хороший, але DOM - це біль
  2. Проблеми з веб-переглядачем можуть звести вас з розуму
  3. Якщо код не тестується щонайменше у чотирьох різних хороших браузерах, ви не можете сказати, що його помилка безкоштовна
  4. Закриття .............. Повинен знати
  5. Його прототип заснований ........... Приємно, що це цікаво дізнатися про це
  6. налагоджувальне слово ..... Допомагає в кризі

Хороший список, досить тонкий. Я посміявся з "4" хороших браузерів. :) Я думаю, що номер 7 має бути здоровою ненавистю до браузерів IE у версії 8.
Shyam

@Shyam, чому ви думаєте, що ми не повинні мати здорової ненависті до IE8? У мене все ще є проблеми в IE8 ... проблеми, які є лише в IE8.
Tracker1

@ Tracker1: Проблеми завжди будуть. І базування браузера я не торкнувся, ну це було б трохи несправедливо. Ось чому я сміявся з 4-х хороших браузерів: "Firefox, Chrome, Safari і Opera" - єдині, для яких я розробляю. Я перестав зламати IE, я просто змушую його запустити код Fisher Price, як ніби JavaScript буде відключений.
Шям

7

Цей JavaScript набагато відрізняється від інших мов, ніж ви можете подумати. Дивіться цю чудову технологію Google Tech Talk, щоб отримати враження: http://www.youtube.com/watch?v=hQVTIJBZook


1
+1 Це чудове пояснення, як зупинити смоктання JavaScript. Їх варто переглянути після цього: yuiblog.com/crockford
Полковник Спонш,

Ще одна гарна презентація Crockfod ("Мова програмування JavaScript" 4 частини) video.yahoo.com/watch/111593/1710507
Алекс К.

7

Що повинен знати кожен кодер JavaScript?

Як щодо того, я можу відключити ваші зусилля за два кліки. Тож надайте, якщо можливо, резервний запас.


Ви також можете видалити веб-браузер. У наші дні дуже мало людей, які відключають JavaScript. Тим, хто, мабуть, не потрібно переглядати Інтернет. Єдиним винятком з цього є те, що веб-сканерам потрібно отримувати доступ до вашого загальнодоступного вмісту, і вони не можуть розраховувати на JS.
Жан Вінсент

Мені більше цікаво надавати шляхи доступу до речей, які не є JS. Мені відомі люди, які переглядають інваліди JS або використовують зчитувачі екранів. Вони не завжди грають добре із JS. Я бачив сайти, на яких проста сторінка для входу подається через ajax, а взагалі немає резервного. Ні JS, ні логін. Сайт навіть не використовує багато JS, а лише надсилати форми.
Хайнестар

Я вважаю, що користувачі, які навмисно вимикають JS, як ви мали на увазі, сьогодні дуже рідкісні, безумовно, набагато менше, ніж 10 років тому. Ось чому я не розумію, чому ми повинні двічі розробляти сайт для людей, які просто не хочуть відвідувати ваш сайт все одно. Тож у вашому прикладі вони не можуть увійти, і що? Інша справа, що абсолютно не існує можливості створити сучасний сайт без JS.
Жан Вінсент


6

Ви знаєте javascript, якщо зможете ефективно використовувати масив, номер, рядок, дату та об’єкт. Плюс балів за Math та RegExp. Ви повинні мати можливість записувати функції та використовувати змінні (у правильному масштабі, тобто як "методи" об'єкта).

Я бачу деякі коментарі щодо знань про закриття, синтаксис екстравагантної функції, блабла. Все це зовсім не має значення для цього питання. Це як би сказати, що ви бігун, якщо зможете пробігти 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 - моя найкраща рекомендація. Не тільки для самого коду, саме ідіома, стиль, мислення, що стоїть за ним, є найбільш гідними наслідування.


2
+1 Jquery зробив революцію в моєму використанні javascript.
amelvin

1
Хороший конспект аргументу. Розширення зробить це чудовою відповіддю.
Стипендіати доналу

jQuery змушує вас перейти в процедурний режим. Я набагато краще пишу ОО JS
Хуан Мендес

Нічого магічного в орієнтації на об'єкти немає. Я вважаю за краще використовувати рамку, розроблену Джоном Ресігом і використану тисячами інших розробників, ніж все, що ви або я написали б, незалежно від режиму.
duffymo

3

Цей JavaScript - це найпоширеніша мова у світі. (Мабуть)


8
Найбільш широко розгорнутою рідною природною мовою є мандарин. Чи знаєте ви, що це зробить вас спікером мандарина? Чи знаєте ви, що цей факт навіть має щось спільне з вашим розумінням мови?
Зано

11
Найпоширенішою мовою у світі є генетичний код ДНК, який контролює синтез білка всередині клітин.
Ернеллі

Перед мандарином і ДНК спочатку слід розгорнути мову Любові: таким чином вона перемагає. БАМ!
Крістофер

3

Вивчення мови дуже добре та розуміння різних її причин випливає з досвіду (років). Якщо ви хочете бути кращим програмістом, я б сказав, розуміючи схеми дизайну, як і коли ними користуватися та / або навіть коли ви їх використовуєте, не усвідомлюючи цього; технічна архітектура та досвід користувача.

Знаючи мову (JavaScript), ви можете підібрати будь-яку основу та використовувати її за бажанням. Вам неминуче потрібно буде зануритися у вихідний код, і якщо все, що ви знаєте, це синтаксис фреймворк або 2 або 3, то далеко не підете. Говорячи про те, що потрапляння у вихідний код кількох різних фреймворків - це, мабуть, один з найкращих способів зрозуміти, як можна використовувати JavaScript. Заплутавшись, переглянувши код у Firebug або Web Inspector, а потім перевіривши Документацію JavaScript, особливо документи Mozilla та Webkit, щоб отримати більше розуміння того, що ви дивитесь.

Розуміючи різницю між об’єктно-орієнтованим та функціональним програмуванням, те, що JavaScript - це сексуальний поєднання двох, коли і як використовувати як для створення кодової бази вбивць, так і дивовижних додатків, зробить вас кращим програмістом JavaScript.

Просто читаючи деякі книги, особливо "хороші частини" Крокфорда, які просто представляють свою думку про те, що добре в JavaScript, а пропуск більшості дивовижних частин JavaScript допоможе вам зірватися з неправильної стопи.

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

Спроба запам’ятати кілька ґотів або WTF також не допоможе. Ви виберете це, якщо почнете кодувати та переглядати код бібліотеки / фреймворків, особливо корисно коментований, щоб побачити, чому вони використовували певні властивості / значення, а не інші, чому і коли добре використовувати конкретні операнди та оператори, це все, що існує в коді, який люди використовують рамки. Як краще, ніж вчитися на прикладі? : ^)


+1 за те, що не поклоняються Крокфорду. Я ставлюсь до його поглядів так, як до проповідника в церкві. Я поважаю те, що вони кажуть, але приймаю все це з зерном солі.
Хуан Мендес

2

У Javascript продуктивність має значення.

Не існує розумного компілятора, який би оптимізував ваш код, тому ви повинні бути обережнішими під час написання коду JavaScript, ніж такі мови, як C #, Java ...


1
Насправді компілятори браузера дуже добре оптимізують ваш код.
Едуардо

1
Chrome дуже розумний в оптимізації вашого коду, ця відповідь просто не відповідає дійсності всіх нових двигунів JS
Juan Mendes

Що з IE, мобільними браузерами?
caltuntas

1

об'єктні літерали, тому що їм так приємно писати.



0
  1. Знаючи, що існує життя з і без, with()і де провести межу.
  2. Ви можете створювати власні помилки за допомогою throwоператора, щоб навмисно зупинити виконання JavaScript.

-1

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

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

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

Я не розумію, чому JavaScript не підтримує цей стиль, оскільки набагато простіше читати дуже складний вихідний код JavaScript при порівнянні зі стилем JavaScript за замовчуванням.

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

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') : '');
}

3
У JavaScript символи нового рядка зазвичай виступають як роздільники тверджень; лише тоді, коли твердження неможливо закінчилося (напр. var foo = "bar" +), аналізатор читає.
Марсель Корпель

Ще один jsFiddle. jsfiddle.net/Soul_Master/BxrDJ
Soul_Master

2
@Marcel - Це не зовсім так; наприклад, два рядки var foo = 5і -1;призведе до того, що foo буде встановлено на 4, хоча кожен з них є дійсними заявами самостійно.
Бен Бланк

4
Це відбувається тому, що мова автоматично вводить крапки з комою для роздільних висловлювань. Це готча з мовою. Ваше твердження про повернення перетворюється на це: return; {key: value,} Щоб уникнути цієї проблеми, вам слід застосувати практику розміщення крапки з комою в одному рядку, наприклад: return {key: value}; Також зробіть собі прихильність і візьміть копію Дугласа Крокфорда: Гарні частини. Про це чітко сказано в книзі.
Раджат

@Ben - Цікавий випадок, дякую за вказівку на це. З цього приводу я рекомендую не покладатися на ці крайові регістри, а просто розміщувати все в одному рядку, що закінчується крапкою з комою, а ваш код розміщувати лише в декількох рядках, коли рядок закінчується чимось заявою чи виразом, просто не може закінчитися .
Марсель Корпель

-3

Оскільки JS є функціональною мовою, гідний програміст JS повинен вміти писати Y-комбінатор і пояснювати, як це працює вгорі голови.


1
Що поганого в тому, щоб писати Y-комбінатор? І так, JavaScript - це функціональна мова. Якщо ви хочете сказати, що ви "знаєте javascript", то добре розуміння функціонального програмування необхідне.
Райнос

C також може використовуватися як функціональна мова.
кж

Нещодавно я читав про комбінатор Y, розумію, як він працює і в яких випадках він може бути використаний .. але жодного разу не знайшов приклад, коли я не зміг би переписати проблему, щоб не потрібен комбінатор Y.
Еверт

-5

... про Google Web Toolkit , а це означає, що ваш проект JavaScript, можливо, міг би бути розроблений набагато зручнішим чином.


2
GWT - це насправді не JavaScript, це яваський спосіб написання JavaScript.
Лівінгстон Самуель

... і кожен програміст Javascipt повинен знати про це.
Віктор Шер

що ваш проект JavaScript, можливо, міг би бути розроблений набагато зручнішим чином.
Віктор Шер

6
Я думаю, що з Javascript легше мати справу, ніж з Java, особисто.
timw4mail
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.