Відповіді:
Не 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% згоден з ним щодо того, які «хороші частини»).
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.
Щоб його можна було відключити.
Розуміння речей, написаних у Jackster Crockford : The Good Parts - це досить гарне припущення, що людина є гідним програмістом JS.
Ви майже можете знати, як використовувати гарну бібліотеку, як JQuery, і досі не знаєте прихованих частин Javascript.
Ще одна примітка - інструменти налагодження в різних браузерах. Програміст JS повинен знати, як налагодити свій код у різних браузерах.
Ой! А знання JSLint повністю зашкодить вашим почуттям !!
Якщо ви хочете бути справжнім ніндзя JavaScript, вам слід знати відповіді на кожне запитання у вікторині « Вдосконалення вбиває JavaScript» .
Приклад, який може підвищити апетит:
(function f(f){
return typeof f();
})(function(){ return 1; });
Що повертає цей вираз?
- "Число"
- "Невизначений"
- "Функція"
- Помилка
Ви не знаєте JavaScript, якщо не знаєте:
You don't know JavaScript if you don't know The W3C-DOM
. Дві речі різні.
..то JavaScript не є Java :)
Багато, багато людей, починаючи з розробки веб-сайтів, сказали мені, що JavaScript - це просто проста Java!
Ознайомтеся з принаймні однією бібліотекою Javascript (Jquery, Prototype тощо).
Дізнайтеся, як користуватися інструментами налагодження основних браузерів (MSIE 7-8, Firefox, Chrome, Safari)
Читайте про галузь: Веб-сайт Дугласа Крокфорда - скарбниця, тоді як Ajaxian.com - хороший блог, щоб не відставати від нових, цікавих та незвичайних ідей для Javascript. Є ще ряд інших ресурсів, але саме ті, які мені найбільше допомогли.
Що Javascript - це не те, чого можна дізнатися за годину!
Змінні є глобальними, якщо не оголошені локальними !!
Погано (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();
for (var i=0;
усі мої петлі
var
верх у функції, оскільки він не обманює вас щодо розміру області змінної. js2-mode
буде скаржитися, якщо ви var i
знаходитесь в двох окремих for
циклах в одній і тій же функції, оскільки це говорить про те, що ви думаєте, що у вас є дві окремі змінні, і ви цього не робите. Тим не менш, я намагаюся ніколи не var
розділяти речі, від яких я їх ініціалізую.
Бо знаючи, що 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 року.
Слід знати про таке, щоб сказати "Я знаю JavaScript":
Цей JavaScript набагато відрізняється від інших мов, ніж ви можете подумати. Дивіться цю чудову технологію Google Tech Talk, щоб отримати враження: http://www.youtube.com/watch?v=hQVTIJBZook
Що повинен знати кожен кодер JavaScript?
Як щодо того, я можу відключити ваші зусилля за два кліки. Тож надайте, якщо можливо, резервний запас.
Настійно рекомендую прочитати Javascript: хороші частини
Ви знаєте javascript, якщо зможете ефективно використовувати масив, номер, рядок, дату та об’єкт. Плюс балів за Math та RegExp. Ви повинні мати можливість записувати функції та використовувати змінні (у правильному масштабі, тобто як "методи" об'єкта).
Я бачу деякі коментарі щодо знань про закриття, синтаксис екстравагантної функції, блабла. Все це зовсім не має значення для цього питання. Це як би сказати, що ви бігун, якщо зможете пробігти 100 м тире за 11 секунд.
Я кажу, що, можливо, знадобиться кілька тижнів, щоб стати знавцем JavaScript. Після цього потрібні роки і десятки книг і тисячі ліній програмування, щоб стати експертом, ніндзя тощо.
Але це не було питання.
О, і DOM не є частиною javascript, а також jQuery. Тож я вважаю, що і те, і інше не має відношення до питання.
JSLint http://www.JSLint.com/
масив . length
метод - не кількість елементів масиву, а найвищий індекс. навіть коли елемент було встановленоundefined
var a = [];
a.length; // === 0
a[10]; // === undefined
a[10] = undefined;
a.length; // === 11
a.pop(); // === undefined
a.length; // === 10
цю поведінку навряд чи можна відрізнити від помилки в мовному дизайні ..
jQuery - моя найкраща рекомендація. Не тільки для самого коду, саме ідіома, стиль, мислення, що стоїть за ним, є найбільш гідними наслідування.
Цей JavaScript - це найпоширеніша мова у світі. (Мабуть)
Вивчення мови дуже добре та розуміння різних її причин випливає з досвіду (років). Якщо ви хочете бути кращим програмістом, я б сказав, розуміючи схеми дизайну, як і коли ними користуватися та / або навіть коли ви їх використовуєте, не усвідомлюючи цього; технічна архітектура та досвід користувача.
Знаючи мову (JavaScript), ви можете підібрати будь-яку основу та використовувати її за бажанням. Вам неминуче потрібно буде зануритися у вихідний код, і якщо все, що ви знаєте, це синтаксис фреймворк або 2 або 3, то далеко не підете. Говорячи про те, що потрапляння у вихідний код кількох різних фреймворків - це, мабуть, один з найкращих способів зрозуміти, як можна використовувати JavaScript. Заплутавшись, переглянувши код у Firebug або Web Inspector, а потім перевіривши Документацію JavaScript, особливо документи Mozilla та Webkit, щоб отримати більше розуміння того, що ви дивитесь.
Розуміючи різницю між об’єктно-орієнтованим та функціональним програмуванням, те, що JavaScript - це сексуальний поєднання двох, коли і як використовувати як для створення кодової бази вбивць, так і дивовижних додатків, зробить вас кращим програмістом JavaScript.
Просто читаючи деякі книги, особливо "хороші частини" Крокфорда, які просто представляють свою думку про те, що добре в JavaScript, а пропуск більшості дивовижних частин JavaScript допоможе вам зірватися з неправильної стопи.
Перевірка коду, написаного кимось, як Томас Фукс, з іншого боку, дасть вам набагато більше уявлення про силу написання дивовижного та ефективного JavaScript.
Спроба запам’ятати кілька ґотів або WTF також не допоможе. Ви виберете це, якщо почнете кодувати та переглядати код бібліотеки / фреймворків, особливо корисно коментований, щоб побачити, чому вони використовували певні властивості / значення, а не інші, чому і коли добре використовувати конкретні операнди та оператори, це все, що існує в коді, який люди використовують рамки. Як краще, ніж вчитися на прикладі? : ^)
У Javascript продуктивність має значення.
Не існує розумного компілятора, який би оптимізував ваш код, тому ви повинні бути обережнішими під час написання коду JavaScript, ніж такі мови, як C #, Java ...
Наступні речі також важливі:
1) Змінна вантажопідйомність. 2) Сфера застосування ланцюгів та об'єктів активації.
а потім такі речі: :)
3) wtfjs.com
4) все є об’єктом http://www.lifeinafolder.com/images/Js.jpg
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') : '');
}
var foo = "bar" +
), аналізатор читає.
var foo = 5
і -1;
призведе до того, що foo буде встановлено на 4, хоча кожен з них є дійсними заявами самостійно.
Оскільки JS є функціональною мовою, гідний програміст JS повинен вміти писати Y-комбінатор і пояснювати, як це працює вгорі голови.
... про Google Web Toolkit , а це означає, що ваш проект JavaScript, можливо, міг би бути розроблений набагато зручнішим чином.