Original Repository: airbnb/javascript
Π Π°Π·ΡΠΌΠ΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π·Π° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° JavaScript
- Π’ΠΈΠΏΠΎΠ²Π΅
- ΠΠ±Π΅ΠΊΡΠΈ
- ΠΠ°ΡΠΈΠ²ΠΈ
- ΠΠΈΠ·ΠΎΠ²Π΅
- Π€ΡΠ½ΠΊΡΠΈΠΈ
- ΠΠΎΠ»Π΅ΡΠ°
- ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
- ΠΠ΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
- Π£ΡΠ»ΠΎΠ²Π½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ ΠΈ ΡΠ°Π²Π΅Π½ΡΡΠ²Π°
- ΠΠ»ΠΎΠΊΠΎΠ²Π΅
- ΠΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ
- ΠΡΠ°Π·Π½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°
- ΠΠ°ΠΏΠ΅ΡΠ°ΠΈ
- Π’ΠΎΡΠΊΠ° ΠΈ Π·Π°ΠΏΠ΅ΡΠ°Ρ
- ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅
- ΠΠ°ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ
- ΠΠΎΡΡΡΠΏΠ²Π°Π½Π΅
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ
- Π‘ΡΠ±ΠΈΡΠΈΡ
- ΠΠΎΠ΄ΡΠ»ΠΈ
- jQuery
- ES5 Π‘ΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ
- Π’Π΅ΡΡΠ²Π°Π½Π΅
- ΠΠ·ΠΏΡΠ»Π΅Π½ΠΈΠ΅
- Π Π΅ΡΡΡΡΠΈ
- ΠΡΠ΄Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅Π·ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ
- ΠΡΠ΅Π²ΠΎΠ΄
- JavaScript ΡΡΠΈΠ»ΠΎΠ² ΠΏΡΡΠ΅Π²ΠΎΠ΄ΠΈΡΠ΅Π»
- Π‘ΡΡΡΡΠ΄Π½ΠΈΡΠΈ
- ΠΠΈΡΠ΅Π½Π·
-
ΠΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΈ: ΠΠΎΠ³Π°ΡΠΎ Π΄ΠΎΡΡΡΠΏΠ²Π°ΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π΅Π½ ΡΠΈΠΏ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΡΡ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ.
string
number
boolean
null
undefined
var foo = 1, bar = foo; bar = 9; console.log(foo, bar); // => 1, 9
-
Π‘ΡΡΡΠ°Π²Π½ΠΈ: ΠΠΎΠ³Π°ΡΠΎ Π΄ΠΎΡΡΡΠΏΠ²Π°ΡΠ΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅Π½ ΡΠΈΠΏ Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΡ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΈ.
object
array
function
var foo = [1, 2], bar = foo; bar[0] = 9; console.log(foo[0], bar[0]); // => 9, 9
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π²ΡΠΎΡΠΈΡ Π²Π°ΡΠΈΠ°Π½Ρ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ.
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var item = new Object(); // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var item = {};
-
ΠΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ Π΄ΡΠΌΠΈ Π·Π° Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. Π’Π΅Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Π½Π° IE8. ΠΠΎΠ²Π΅ΡΠ΅
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var superman = { default: { clark: 'kent' }, private: true }; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var superman = { defaults: { clark: 'kent' }, hidden: true };
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠΌΠΈΡΠ»Π΅Π½ΠΈ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠΈ Π½Π° ΠΌΡΡΡΠΎΡΠΎ Π½Π° Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ Π΄ΡΠΌΠΈ.
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var superman = { class: 'alien' }; // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var superman = { klass: 'alien' }; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var superman = { type: 'alien' };
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΡΡ ΡΠΊΠΎΠ±ΠΈΡΠ΅ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΌΠ°ΡΠΈΠ²
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var items = new Array(); // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var items = [];
-
ΠΠΊΠΎ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ Π΄ΡΠ»ΠΆΠΈΠ½Π°ΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ², ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Array#push.
var someStack = []; // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° someStack[someStack.length] = 'abracadabra'; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° someStack.push('abracadabra');
-
ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ΠΌΠ°ΡΠΈΠ² ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Array#slice. jsPerf
var len = items.length, itemsCopy = [], i; // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° for (i = 0; i < len; i++) { itemsCopy[i] = items[i]; } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° itemsCopy = items.slice();
-
ΠΠ° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΠΌΠ°ΡΠΈΠ² ΠΎΠ±Π΅ΠΊΡ ΠΊΡΠΌ ΠΌΠ°ΡΠΈΠ², ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Array#slice.
function trigger() { var args = Array.prototype.slice.call(arguments); ... }
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΈ ΠΊΠ°Π²ΠΈΡΠΊΠΈ
''
Π·Π° ΠΠΈΠ·ΠΎΠ²Π΅.// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var name = "Bob Parr"; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var name = 'Bob Parr'; // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var fullName = "Bob " + this.lastName; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var fullName = 'Bob ' + this.lastName;
-
ΠΠΈΠ·ΠΎΠ²Π΅, ΠΏΠΎ-Π΄ΡΠ»Π³ΠΈ ΠΎΡ 80 ΡΠΈΠΌΠ²ΠΎΠ»Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π΄Π°, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ.
-
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΠΊΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, . jsPerf & s
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.'; // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var errorMessage = 'This is a super long error that \ was thrown because of Batman. \ When you stop to think about \ how Batman had anything to do \ with this, you would get nowhere \ fast.'; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var errorMessage = 'This is a super long error that ' + 'was thrown because of Batman.' + 'When you stop to think about ' + 'how Batman had anything to do ' + 'with this, you would get nowhere ' + 'fast.';
-
ΠΠΎΠ³Π°ΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π½ΠΈΠ·, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Array#join Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ. jsPerf.
var items, messages, length, i; messages = [{ state: 'success', message: 'This one worked.' },{ state: 'success', message: 'This one worked as well.' },{ state: 'error', message: 'This one did not work.' }]; length = messages.length; // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function inbox(messages) { items = '<ul>'; for (i = 0; i < length; i++) { items += '<li>' + messages[i].message + '</li>'; } return items + '</ul>'; } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function inbox(messages) { items = []; for (i = 0; i < length; i++) { items[i] = messages[i].message; } return '<ul><li>' + items.join('</li><li>') + '</li></ul>'; }
-
Π€ΡΠ½ΠΊΡΠΈΠΈ-ΠΈΠ·ΡΠ°Π·ΠΈ:
// ΠΠ½ΠΎΠ½ΠΈΠΌΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ var anonymous = function() { return true; }; // ΠΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ var named = function named() { return true; }; // ΠΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΈΠ·ΡΠ°Π·ΠΈ (IIFE) (function() { console.log('Welcome to the Internet. Please follow me.'); })();
-
ΠΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°ΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π² Π½Π΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π΅Π»Π΅Π½ Π±Π»ΠΎΠΊ (if, while, etc). ΠΠ°ΠΉΡΠ΅ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΈ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π°. ΠΡΠ°ΡΠ·ΡΡΠΈΡΠ΅ ΡΠ΅ Π΄Π°Π΄Π°Ρ ΡΠΎΠ²Π°, Π½ΠΎ ΡΠ΅ Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ Π΅ Π½ΠΈΠΊΠ°ΠΊ Π΄ΠΎΠ±ΡΠ΅.
-
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ECMA-262 Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°
block
ΠΊΠ°ΡΠΎ Π»ΠΈΡΡ Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ/ΡΠ²ΡΡΠ΄Π΅Π½ΠΈΡ. ΠΠ΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ½ΡΠΈΡ Π½Π΅ Π΅ ΡΠ²ΡΡΠ΄Π΅Π½ΠΈΠ΅. Read ECMA-262's note on this issue.// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° if (currentUser) { function test() { console.log('Nope.'); } } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var test; if (currentUser) { test = function test() { console.log('Yup.'); }; }
-
ΠΠΈΠΊΠΎΠ³Π° Π½Π΅ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΠΉΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
arguments
, ΡΠΎΠ²Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π°arguments
-ΠΎΠ±Π΅ΠΊΡΠ°, ΠΊΠΎΠΉΡΠΎ Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ ΡΠΊΠΎΡΠΏ.// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function nope(name, options, arguments) { // ...stuff... } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function yup(name, options, args) { // ...stuff... }
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ '.' Π·Π° Π΄ΠΎΡΡΡΠΏΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»Π΅ΡΠ°.
var luke = { jedi: true, age: 28 }; // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var isJedi = luke['jedi']; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var isJedi = luke.jedi;
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅
[]
ΠΊΠΎΠ³Π°ΡΠΎ Π΄ΠΎΡΡΡΠΏΠ²Π°ΡΠ΅ ΠΏΠΎΠ»Π΅ΡΠ° Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°.var luke = { jedi: true, age: 28 }; function getProp(prop) { return luke[prop]; } var isJedi = getProp('jedi');
-
ΠΠΈΠ½Π°Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅
var
Π·Π° Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. Π ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Ρ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. ΠΠΈΠ΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π½Π΅ 'Π·Π°ΠΌΡΡΡΡΠ²Π°Π½Π΅' Π³Π»ΠΎΠ±Π°Π»Π½ΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Ρ ΡΡΡ . 'ΠΠ°ΠΏΠΈΡΠ°Π½ ΠΏΠ»Π°Π½Π΅ΡΠ° Π½ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈ Π·Π° ΡΡΡ '.// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° superPower = new SuperPower(); // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var superPower = new SuperPower();
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π΅Π΄Π½Π°
var
Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΡΠΊΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° Π½ΠΎΠ² ΡΠ΅Π΄.// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var items = getItems(); var goSportsTeam = true; var dragonball = 'z'; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var items = getItems(), goSportsTeam = true, dragonball = 'z';
-
ΠΠ΅ΠΊΠ»Π°ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π½Π΅ΠΏΡΠΎΠ΄ΠΎΠ±ΠΈΠ»ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π·Π°Π²ΠΈΡΠ΅ΡΠ° ΠΎΡ Π½ΡΠΊΠΎΡ ΠΎΡ ΠΏΡΠ΅Π΄Ρ ΠΎΠ΄Π½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var i, len, dragonball, items = getItems(), goSportsTeam = true; // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var i, items = getItems(), dragonball, goSportsTeam = true, len; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var items = getItems(), goSportsTeam = true, dragonball, length, i;
-
Π‘Π»Π°Π³Π°ΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠΊΠΎΡΠΏΠ° ΠΈΠΌ. Π’ΠΎΠ²Π° ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΎΠΌΠ΅ΡΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π½Π΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function() { test(); console.log('doing stuff..'); //..Π΄ΡΡΠ³ΠΈ.. var name = getName(); if (name === 'test') { return false; } return name; } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function() { var name = getName(); test(); console.log('doing stuff..'); //..other stuff.. if (name === 'test') { return false; } return name; } // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function() { var name = getName(); if (!arguments.length) { return false; } return true; } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function() { if (!arguments.length) { return false; } var name = getName(); return true; }
-
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Ρ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΠΊΡ, ΡΡΡ Π½ΠΎΡΠΎ ΠΈΠ·ΠΏΠΎΠ·Π»Π²Π°Π½Π΅ ΡΡΠ°Π²Π° ΠΏΠΎ-Π½Π°Π΄ΠΎΠ»Ρ.
// Π’ΠΎΠ²Π° Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ (ΠΏΡΠΈΠ΅ΠΌΠ°ΠΌΠ΅, ΡΠ΅ Π½ΡΠΌΠ° // Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π° notDefined Π² Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡ ΡΠΊΠΎΡΠΏ) function example() { console.log(notDefined); // => throws a ReferenceError } // ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΏΡΠ΅Π΄ΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΡΠ° ΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ, // Π½ΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΡΠ° ΠΈ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ Π²Π·ΠΈΠΌΠ° function example() { console.log(declaredButNotAssigned); // => undefined var declaredButNotAssigned = true; } // ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡΡ ΠΏΠΎΡΡΠ°Π²Ρ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ΡΠΎ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ // Π½Π° ΡΠΊΠΎΡΠΏΠ°. ΠΡΠΈΠΌΠ΅ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ΅ ΡΠ°ΠΊΠ° : function example() { var declaredButNotAssigned; console.log(declaredButNotAssigned); // => undefined declaredButNotAssigned = true; }
-
ΠΠ½ΠΎΠ½ΠΈΠΌΠ½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΈΠ·ΡΠ°Π·ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΡ Π½Π°ΠΉ-Π³ΠΎΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π½ΠΎ Π½Π΅ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ°/ΡΡΠ½ΡΠΊΠΈΡΡΠ°, ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Π° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°.
function example() { console.log(anonymous); // => undefined anonymous(); // => TypeError anonymous is not a function var anonymous = function() { console.log('anonymous function expression'); }; }
-
ΠΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΈΠ·ΡΠ°Π·ΠΈ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΡ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°, Π° Π½Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΠΈΠ»ΠΈ ΡΡΠ»ΠΎΡΠΎ ΠΈ.
function example() { console.log(named); // => undefined named(); // => TypeError named is not a function superPower(); // => ReferenceError superPower is not defined var named = function superPower() { console.log('Flying'); }; } // ΡΡΡΠΎΡΠΎ Π΅ Π²ΡΡΠ½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° // Π΅ ΡΡΡΠΎΡΠΎ ΠΊΠ°ΡΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°. function example() { console.log(named); // => undefined named(); // => TypeError named is not a function var named = function named() { console.log('named'); } }
-
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΠΏΡΠ΅Ρ Π²ΡΡΠ»Ρ ΠΈΠΌΠ΅ΡΠΎ ΠΈ ΡΡΠ»ΠΎΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ.
function example() { superPower(); // => Flying function superPower() { console.log('Flying'); } }
-
ΠΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ JavaScript Scoping & Hoisting ΠΎΡ Ben Cherry
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅
===
ΠΈ!==
Π²ΠΌΠ΅ΡΡΠΎ==
ΠΈ!=
. -
Π£ΡΠ»ΠΎΠ²Π½ΠΈΡΠ΅ ΠΈΠ·ΡΠ°Π·ΠΈ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ ΡΡΠ΅Π· ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ ΠΊΡΠΌ
ToBoolean
ΠΌΠ΅ΡΠΎΠ΄ ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΡΠ»Π΅Π΄Π²Π°Ρ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°:- Objects ΡΡΠ°Π²Π° true
- Undefined ΡΡΠ°Π²Π° false
- Null ΡΡΠ°Π²Π° false
- Booleans ΡΡΠ°Π²Π° the value of the boolean
- Numbers ΡΡΠ°Π²Π° false ΠΠΊΠΎ +0, -0, or NaN, ΠΈΠ½Π°ΡΠ΅ true
- Strings ΡΡΠ°Π²Π° false Π°ΠΊΠΎ Π΅ ΠΏΡΠ°Π·Π΅Π½ Π½ΠΈΠ·
''
, ΠΈΠ½Π°ΡΠ΅ true
if ([0]) { // Π²ΡΡΠ½ΠΎ // ΠΠΊΠΎ ΠΌΠ°ΡΠΈΠ²ΡΡ Π΅ ΠΎΠ±Π΅ΠΊΡ, ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ Π²ΡΡΡΠ°Ρ true }
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΊΡΠ°ΡΠΊΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠΈ.
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° if (name !== '') { // ...stuff... } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° if (name) { // ...stuff... } // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° if (collection.length > 0) { // ...stuff... } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° if (collection.length) { // ...stuff... }
-
ΠΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Truth Equality and JavaScript by Angus Croll
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠΊΠΎΠ±ΠΈ Ρ Π²ΡΠΈΡΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΅Π΄ΠΎΠ²ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅.
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° if (test) return false; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° if (test) return false; // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° if (test) { return false; } // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function() { return false; } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function() { return false; }
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅
/** ... */
Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΅Π΄ΠΎΠ²ΠΈ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ. ΠΠΊΠ»ΡΡΠ΅ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅Π½ΠΈΠ΅, ΠΈΠ·ΡΡΠ½Π΅ΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π²ΡΡΡΠ°Ρ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ°.// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° // make() returns a new element // based on the passed in tag name // // @param <String> tag // @return <Element> element function make(tag) { // ...stuff... return element; } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° /** * make() returns a new element * based on the passed in tag name * * @param <String> tag * @return <Element> element */ function make(tag) { // ...stuff... return element; }
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅
//
Π·Π° Π΅Π΄Π½ΠΎΡΠ΅Π΄ΠΎΠ²ΠΈ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ. ΠΠΎΡΡΠ°Π²ΡΡΠΉΡΠ΅ Π΅Π΄Π½ΠΎΡΠ΅Π΄ΠΎΠ²ΠΈΡΠ΅ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ Π½Π° Π½ΠΎΠ² ΡΠ΅Π΄ Π½Π°Π΄ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ° Π½Π° ΠΎΠ±ΡΡΠ½Π΅Π½ΠΈΠ΅. ΠΠΎΡΡΠ°Π²Π΅ΡΠ΅ ΠΈ ΠΏΡΠ°Π·Π΅Π½ ΡΠ΅Π΄ ΠΏΡΠ΅Π΄ΠΈ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°.// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° var active = true; // is current tab // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° // is current tab var active = true; // Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function getType() { console.log('fetching type...'); var type = this._type || 'no type'; return type; } // Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° function getType() { console.log('fetching type...'); var type = this._type || 'no type'; return type; }
-
ΠΠΎΡΡΠ°Π²ΡΠΉΡΠ΅ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅
FIXME
ΠΈΠ»ΠΈTODO
, ΠΏΠΎΠΌΠ°Π³Π°ΠΉΠΊΠΈ Π½Π° Π΄ΡΡΠ³ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ°Ρ Π°ΠΊΠΎ ΠΈΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π³Π»Π΅Π΄Π°Π½ ΠΈΠ»ΠΈ Π΄Π° ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π’ΠΎΠ²Π° ΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ, Π·Π°ΡΠΎΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅.FIXME -- need to figure this out
orTODO -- need to implement
. -
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅
// FIXME:
Π΄Π° Π°Π½ΠΎΠ½ΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌfunction Calculator() { // FIXME: shouldn't use a global here total = 0; return this; }
-
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅
// TODO:
Π΄Π° Π°Π½ΠΎΠ½ΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°function Calculator() { // TODO: total should be configurable by an options param this.total = 0; return this; }
**[[β¬]](#TOC)**
## <a name='whitespace'>ΠΡΠ°Π·Π½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°</a>
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠ°Π±ΡΠ»Π°ΡΠΈΠΈ Ρ 2 ΠΏΡΠ°Π·Π½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function() {
ββββvar name;
}
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function() {
βvar name;
}
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function() {
ββvar name;
}
```
- ΠΠΎΡΡΠ°Π²ΡΠΉΡΠ΅ 1 ΠΏΡΠ°Π·Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄ΠΈ Π½Π°ΡΠ°Π»Π½Π° ΡΠΊΠΎΠ±Π°.
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function test(){
console.log('test');
}
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function test() {
console.log('test');
}
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
dog.set('attr',{
age: '1 year',
breed: 'Bernese Mountain Dog'
});
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
dog.set('attr', {
age: '1 year',
breed: 'Bernese Mountain Dog'
});
```
- ΠΠΎΡΡΠ°Π²ΡΠΉΡΠ΅ ΠΏΡΠ°Π·Π΅Π½ ΡΠ΅Π΄ Π² ΠΊΡΠ°Ρ Π½Π° ΡΠ°ΠΉΠ».
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
(function(global) {
// ...stuff...
})(this);
```
```javascript
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
(function(global) {
// ...stuff...
})(this);
```
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΉΠ΅ΡΠ°ΡΡ
ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ ΠΏΡΠΈ Π΄ΡΠ»Π³ΠΈ Π²Π΅ΡΠΈΠ³ΠΈ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈ.
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
$('#items').find('.selected').highlight().end().find('.open').updateCount();
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
$('#items')
.find('.selected')
.highlight()
.end()
.find('.open')
.updateCount();
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
.attr('width', (radius + margin) * 2).append('svg:g')
.attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
.call(tron.led);
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var leds = stage.selectAll('.led')
.data(data)
.enter().append('svg:svg')
.class('led', true)
.attr('width', (radius + margin) * 2)
.append('svg:g')
.attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
.call(tron.led);
```
**[[β¬]](#TOC)**
## <a name='commas'>ΠΠ°ΠΏΠ΅ΡΠ°ΠΈ</a>
- ΠΠ°ΠΏΠ΅ΡΠ°Ρ Π½Π° Π½ΠΎΠ² ΡΠ΅Π΄: **ΠΠ.**
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var once
, upon
, aTime;
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var once,
upon,
aTime;
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var hero = {
firstName: 'Bob'
, lastName: 'Parr'
, heroName: 'Mr. Incredible'
, superPower: 'strength'
};
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var hero = {
firstName: 'Bob',
lastName: 'Parr',
heroName: 'Mr. Incredible',
superPower: 'strength'
};
```
- ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° Π·Π°ΠΏΠ΅ΡΠ°Ρ Π² ΠΊΡΠ°Ρ: **ΠΠ.** ΠΠΎΠΆΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ IE6/7 ΠΈ IE9. Π‘ΡΡΠΎ, Π² Π½ΡΠΊΠΎΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ES3 ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ Π΄ΡΠ»ΠΆΠΈΠ½Π° ΠΊΡΠΌ ΠΌΠ°ΡΠΈΠ² Π°ΠΊΠΎ ΠΈΠΌΠ° ΡΠ°ΠΊΠ°Π²Π° Π·Π°ΠΏΠ΅ΡΠ°Ρ. Π’ΠΎΠ²Π° Π΅ ΠΈΠ·ΡΡΠ½Π΅Π½ΠΎ Π² ES5 ([source](http://es5.github.io/#D)):
> ΠΠ·Π΄Π°Π½ΠΈΠ΅ 5 ΠΈΠ·ΡΡΠ½ΡΠ²Π° ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π·Π°ΠΏΠ΅ΡΠ°Ρ Π² ΠΊΡΠ°Ρ Π½Π° ArrayInitialiser Π½Π΅ Π΄ΠΎΠ±Π°Π²Ρ Π΄ΡΠ»ΠΆΠΈΠ½Π° ΠΊΡΠΌ ΠΌΠ°ΡΠΈΠ²Π°. Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠ½Π° ΠΏΡΠΎΠΌΡΠ½Π° ΠΎΡ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ 3, Π½ΠΎ Π½ΡΠΊΠΎΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΡΠΊΠ°Ρ ΡΠΎΠ²Π°.
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var hero = {
firstName: 'Kevin',
lastName: 'Flynn',
};
var heroes = [
'Batman',
'Superman',
];
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var hero = {
firstName: 'Kevin',
lastName: 'Flynn'
};
var heroes = [
'Batman',
'Superman'
];
```
**[[β¬]](#TOC)**
## <a name='semicolons'>Π’ΠΎΡΠΊΠ° ΠΈ Π·Π°ΠΏΠ΅ΡΠ°Ρ</a>
- **ΠΠ.**
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
(function() {
var name = 'Skywalker'
return name
})()
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
(function() {
var name = 'Skywalker';
return name;
})();
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
;(function() {
var name = 'Skywalker';
return name;
})();
```
**[[β¬]](#TOC)**
## <a name='type-coercion'>ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅</a>
- ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ.
- ΠΠΈΠ·:
```javascript
// => this.reviewScore = 9;
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var totalScore = this.reviewScore + '';
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var totalScore = '' + this.reviewScore;
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var totalScore = '' + this.reviewScore + ' total score';
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var totalScore = this.reviewScore + ' total score';
```
- Use `parseInt` for Numbers and always with a radix for type casting.
```javascript
var inputValue = '4';
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var val = new Number(inputValue);
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var val = +inputValue;
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var val = inputValue >> 0;
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var val = parseInt(inputValue);
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var val = Number(inputValue);
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var val = parseInt(inputValue, 10);
```
- Π ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ ΡΠ΅ΡΠΈΡΠ΅ Π΄Π° ΡΡΠ΅ ΠΏΠ°Π»Π°Π²ΠΈ Ρ `parseInt` ΠΈ ΡΠΎΠ²Π° Π²ΠΈ Π΅ Π°Ρ
ΠΈΠ»Π΅ΡΠΎΠ²Π°ΡΠ° ΠΏΠ΅ΡΠ° ΠΈ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π°ΡΠ΅ ΡΠΌΡΠ½Π° Π½Π° Π±ΠΈΡΠΎΠ²Π΅ [performance reasons](http://jsperf.com/coercion-vs-casting/3), ΠΎΡΡΠ°Π²Π΅ΡΠ΅ ΠΊΠΎΠΌΠ΅Π½ΡΠ°Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈ Π·Π°ΡΠΎ ΠΏΡΠ°Π²ΠΈΡΠ΅.
- **ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°:** ΠΡΠ΄Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠ°Π·Π»ΠΈΠ²ΠΈ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π±ΠΈΡΠΎΠ²Π΅. Π§ΠΈΡΠ»Π°ΡΠ° ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ ΡΡΠ΅Π· [64-bit values](http://es5.github.io/#x4.3.19), Π½ΠΎ ΡΠΌΡΠ½Π°ΡΠ° Π½Π° Π±ΠΈΡΠΎΠ²Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π²ΡΡΡΠ° 32-Π±ΠΈΡΠΎΠ² ΠΈΠ½ΡΠΈΠ΄ΠΆΠ΅Ρ ([source](http://es5.github.io/#x11.7)). Π‘ΠΌΡΠ½Π°ΡΠ° Π½Π° Π±ΠΈΡΠΎΠ²Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈ ΠΏΡΠΈ ΡΠΈΡΠ»ΠΎΠ²ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° 32 Π±ΠΈΡΠ°. [Discussion](https://github.com/airbnb/javascript/issues/109)
```javascript
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
/**
* parseInt Π±Π΅ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Π° ΠΊΠΎΠ΄Π° ΠΌΠΈ Π΄Π° Π΅ Π±Π°Π²Π΅Π½.
* ΠΡΠΎΠΌΡΠ½Π°ΡΠ° Π½Π° Π±ΠΈΡΠΎΠ²Π΅ Π² ΡΡΡΠΈΠ½Π³Π°
* ΠΊΡΠΌ ΡΠΈΡΠ»Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΠΎ-Π±ΡΡΠ·.
*/
var val = inputValue >> 0;
```
- ΠΡΠ»Π΅Π²ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ:
```javascript
var age = 0;
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var hasAge = new Boolean(age);
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var hasAge = Boolean(age);
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var hasAge = !!age;
```
**[[β¬]](#TOC)**
## <a name='naming-conventions'>ΠΠ°ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ</a>
- ΠΠ·Π±ΡΠ³Π²Π°ΠΉΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΎΡ 1 Π±ΡΠΊΠ²Π°. ΠΠ±ΡΡΠ½ΡΠ²Π°ΠΉΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅.
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function q() {
// ...stuff...
}
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function query() {
// ..stuff..
}
```
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ camelCase, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈ, ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈ
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var OBJEcttsssss = {};
var this_is_my_object = {};
function c() {};
var u = new user({
name: 'Bob Parr'
});
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var thisIsMyObject = {};
function thisIsMyFunction() {};
var user = new User({
name: 'Bob Parr'
});
```
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ PascalCase ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function user(options) {
this.name = options.name;
}
var Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° = new user({
name: 'nope'
});
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function User(options) {
this.name = options.name;
}
var Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° = new User({
name: 'yup'
});
```
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ»Π½ΠΎ ΡΠΈΡΠ΅ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ `_`, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ ΡΠ°ΡΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
this.__firstName__ = 'Panda';
this.firstName_ = 'Panda';
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
this._firstName = 'Panda';
```
- ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΠΊΡΠΌ `this` ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ `_this`.
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function() {
var self = this;
return function() {
console.log(self);
};
}
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function() {
var that = this;
return function() {
console.log(that);
};
}
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function() {
var _this = this;
return function() {
console.log(_this);
};
}
```
- ΠΠΌΠ΅Π½ΡΠ²Π°ΠΉΡΠ΅ ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΉΡΠ΅. Π’ΠΎΠ²Π° Π΅ Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°ΠΊΠ°.
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var log = function(msg) {
console.log(msg);
};
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var log = function log(msg) {
console.log(msg);
};
```
**[[β¬]](#TOC)**
## <a name='accessors'>ΠΠΎΡΡΡΠΏΠ²Π°Π½Π΅</a>
- ΠΠ΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
- ΠΠΊΠΎ ΠΈΠΌΠ° - ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° getVal() ΠΈ setVal('hello')
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
dragon.age();
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
dragon.getAge();
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
dragon.age(25);
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
dragon.setAge(25);
```
- ΠΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π΅ Π±ΡΠ»Π΅Π²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ isVal() ΠΈΠ»ΠΈ hasVal()
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
if (!dragon.age()) {
return false;
}
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
if (!dragon.hasAge()) {
return false;
}
```
- ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π°Ρ get() ΠΈ set() ΡΡΠ½ΠΊΡΠΈΠΈ, Π½ΠΎ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΈ Ρ ΡΡΡ
.
```javascript
function Jedi(options) {
options || (options = {});
var lightsaber = options.lightsaber || 'blue';
this.set('lightsaber', lightsaber);
}
Jedi.prototype.set = function(key, val) {
this[key] = val;
};
Jedi.prototype.get = function(key) {
return this[key];
};
```
**[[β¬]](#TOC)**
## <a name='constructors'>ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ</a>
- ΠΡΠΈΡΠ²ΠΎΡΠ²Π°ΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π½Π° ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ° ΠΎΠ±Π΅ΠΊΡ, Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ° Ρ Π½ΠΎΠ² ΠΎΠ±Π΅ΠΊΡ. ΠΡΠ΅Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ° ΠΏΡΠ°Π²ΠΈ Π½Π°ΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ: ΠΎΡ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ°, ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π±Π°Π·Π°ΡΠ°!
```javascript
function Jedi() {
console.log('new jedi');
}
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
Jedi.prototype = {
fight: function fight() {
console.log('fighting');
},
block: function block() {
console.log('blocking');
}
};
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
Jedi.prototype.fight = function fight() {
console.log('fighting');
};
Jedi.prototype.block = function block() {
console.log('blocking');
};
```
- ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΡΡΠ°Ρ `this` ΠΏΠΎΠΌΠ°Π³Π°ΠΉΠΊΠΈ Ρ Π½Π°Π²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ.
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
Jedi.prototype.jump = function() {
this.jumping = true;
return true;
};
Jedi.prototype.setHeight = function(height) {
this.height = height;
};
var luke = new Jedi();
luke.jump(); // => true
luke.setHeight(20) // => undefined
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
Jedi.prototype.jump = function() {
this.jumping = true;
return this;
};
Jedi.prototype.setHeight = function(height) {
this.height = height;
return this;
};
var luke = new Jedi();
luke.jump()
.setHeight(20);
```
- ΠΠΎΠΆΠ΅ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΈ toString() ΠΌΠ΅ΡΠΎΠ΄, ΠΏΡΠΎΡΡΠΎ Π±ΡΠ΄Π΅ΡΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ, ΡΠ΅ Π½ΡΠΌΠ° ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈ Π΅ΡΠ΅ΠΊΡΠΈ.
```javascript
function Jedi(options) {
options || (options = {});
this.name = options.name || 'no name';
}
Jedi.prototype.getName = function getName() {
return this.name;
};
Jedi.prototype.toString = function toString() {
return 'Jedi - ' + this.getName();
};
```
**[[β¬]](#TOC)**
## <a name='events'>Π‘ΡΠ±ΠΈΡΠΈΡ</a>
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
$(this).trigger('listingUpdated', listing.id);
...
$(this).on('listingUpdated', function(e, listingId) {
// do something with listingId
});
```
ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΠΉΡΠ΅:
```javascript
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
$(this).trigger('listingUpdated', { listingId : listing.id });
...
$(this).on('listingUpdated', function(e, data) {
// do something with data.listingId
});
```
**[[β¬]](#TOC)**
## <a name='modules'>ΠΠΎΠ΄ΡΠ»ΠΈ</a>
- ΠΠΎΠ΄ΡΠ» ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ²Π° Ρ `!`. Π’ΠΎΠ²Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°, ΡΠ΅ Π΄ΠΎΡΠΈ Π΄ΡΡΠ³ ΠΌΠΎΠ΄ΡΠ» Π΄Π° Π΅ Π·Π°Π±ΡΠ°Π²ΠΈΠ» Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈ Π½Π° ΠΊΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΈ Π·Π°ΠΏΠ΅ΡΠ°Ρ, Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½ΠΈΡΠ°Ρ. [Explanation](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933)
- Π€Π°ΠΉΠ»ΡΡ ΡΠ΅ Π½Π°ΠΈΠΌΠ΅Π½ΡΠ²Π° Ρ camelCase, Π² ΠΏΠ°ΠΏΠΊΠ° ΡΡΡ ΡΡΡΠΎΡΠΎ ΠΈΠΌΠ΅.
- ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠ°Π·Π²Π°Ρ ΡΠ΅ noConflict(), ΠΏΠΎΡΡΠ°Π²ΡΡ Π΅ΠΊΡΠΏΠΎΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΊΡΠΌ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π° Π²Π΅ΡΡΠΈΡ ΠΈ Π²ΡΡΡΠ°Ρ ΡΠΎΠ·ΠΈ.
- ΠΠ΅ΠΊΠ»Π°ΡΠΈΡΠ°ΠΉΡΠ΅ `'use strict';` Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΠΌΠΎΠ΄ΡΠ».
```javascript
// fancyInput/fancyInput.js
!function(global) {
'use strict';
var previousFancyInput = global.FancyInput;
function FancyInput(options) {
this.options = options || {};
}
FancyInput.noConflict = function noConflict() {
global.FancyInput = previousFancyInput;
return FancyInput;
};
global.FancyInput = FancyInput;
}(this);
```
**[[β¬]](#TOC)**
## <a name='jquery'>jQuery</a>
- ΠΠΎΡΡΠ°Π²Π΅ΡΠ΅ jQuery ΠΎΠ±Π΅ΠΊΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Ρ `$`.
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var sidebar = $('.sidebar');
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
var $sidebar = $('.sidebar');
```
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function setSidebar() {
$('.sidebar').hide();
// ...stuff...
$('.sidebar').css({
'background-color': 'pink'
});
}
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
function setSidebar() {
var $sidebar = $('.sidebar');
$sidebar.hide();
// ...stuff...
$sidebar.css({
'background-color': 'pink'
});
}
```
//- For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
- ΠΠ° DOM ΡΡΡΡΠ΅Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΊΠ°ΡΠΊΠ°Π΄Π½ΠΎ `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
- Use `find` with scoped jQuery object queries.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ `find` Π² jQuery Π·Π° ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π½Π°ΠΌΠΈΡΠ°Π½Π΅ Π² ΡΠΊΠΎΡΠΏ.
```javascript
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
$('ul', '.sidebar').hide();
// Π»ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
$('.sidebar').find('ul').hide();
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
$('.sidebar ul').hide();
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
$('.sidebar > ul').hide();
// Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
$sidebar.find('ul');
```
**[[β¬]](#TOC)**
## <a name='es5'>ECMAScript 5 Π‘ΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ</a>
- ΠΡΠ½Π°ΡΡ ΡΠ΅ [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/)
**[[β¬]](#TOC)**
## <a name='testing'>Π’Π΅ΡΡΠ²Π°Π½Π΅</a>
- **ΠΠ.**
```javascript
function() {
return true;
}
```
**[[β¬]](#TOC)**
## <a name='performance'>ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅</a>
- [On Layout & Web Performance](http://kellegous.com/j/2013/01/26/layout-performance/)
- [String vs Array Concat](http://jsperf.com/string-vs-array-concat/2)
- [Try/Catch Cost In a Loop](http://jsperf.com/try-catch-in-loop-cost)
- [Bang Function](http://jsperf.com/bang-function)
- [jQuery Find vs Context, Selector](http://jsperf.com/jquery-find-vs-context-sel/13)
- [innerHTML vs textContent for script text](http://jsperf.com/innerhtml-vs-textcontent-for-script-text)
- [Long String Concatenation](http://jsperf.com/ya-string-concat)
- Loading...
**[[β¬]](#TOC)**
## <a name='resources'>Π Π΅ΡΡΡΡΠΈ</a>
**ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΠΎΠ²Π°**
- [Annotated ECMAScript 5.1](http://es5.github.com/)
**ΠΡΡΠ³ΠΈ ΡΡΠΈΠ»ΠΎΠ²ΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°**
- [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)
- [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines)
- [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwldrn/idiomatic.js/)
**ΠΡΡΠ³ΠΈ ΡΡΠΈΠ»ΠΎΠ²Π΅**
- [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
- [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52)
- [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript)
**ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ**
- [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
- [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
**ΠΠ½ΠΈΠ³ΠΈ**
- [JavaScript: The good Parts](http://www.amazon.com/JavaScript-good-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford
- [JavaScript Patterns](http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752) - Stoyan Stefanov
- [Pro JavaScript Design Patterns](http://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X) - Ross Harmes and Dustin Diaz
- [High Performance Web Sites: Essential Knowledge for Front-End Engineers](http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309) - Steve Souders
- [Maintainable JavaScript](http://www.amazon.com/Maintainable-JavaScript-Nicholas-C-Zakas/dp/1449327680) - Nicholas C. Zakas
- [JavaScript Web Applications](http://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw
- [Pro JavaScript Techniques](http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig
- [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch
- [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
- [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
- [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
- [JSBooks](http://jsbooks.revolunet.com/)
**ΠΠ»ΠΎΠ³ΠΎΠ²Π΅**
- [DailyJS](http://dailyjs.com/)
- [JavaScript Weekly](http://javascriptweekly.com/)
- [JavaScript, JavaScript...](http://javascriptweblog.wordpress.com/)
- [Bocoup Weblog](http://weblog.bocoup.com/)
- [Adequately good](http://www.adequatelygood.com/)
- [NCZOnline](http://www.nczonline.net/)
- [Perfection Kills](http://perfectionkills.com/)
- [Ben Alman](http://benalman.com/)
- [Dmitry Baranovskiy](http://dmitry.baranovskiy.com/)
- [Dustin Diaz](http://dustindiaz.com/)
- [nettuts](http://net.tutsplus.com/?s=javascript)
**[[β¬]](#TOC)**
## <a name='in-the-wild'>ΠΡΠ΄Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅Π·ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ</a>
- **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
- **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
- **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
- **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
- **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
- **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
- **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
- **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
- **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
- **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
- **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
- **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
- **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
- **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
- **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
- **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
- **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
- **Userify**: [userify/javascript](https://github.com/userify/javascript)
- **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
- **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)
## <a name='translation'>ΠΡΠ΅Π²ΠΎΠ΄ΠΈ</a>
ΠΡΡΠ³ΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈ
- :de: **ΠΠ΅ΠΌΡΠΊΠΈ**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
- :jp: **Π―ΠΏΠΎΠ½ΡΠΊΠΈ**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
- :br: **ΠΠΎΡΡΠΎΠ³Π°Π»ΡΠΊΠΈ**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
- :cn: **ΠΠΈΡΠ°ΠΉΡΠΊΠΈ**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
- :es: **ΠΡΠΏΠ°Π½ΡΠΊΠΈ**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
- :kr: **ΠΠΎΡΠ΅ΠΉΡΠΊΠΈ**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
- :fr: **Π€ΡΠ΅Π½ΡΠΊΠΈ**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
- :ru: **Π ΡΡΠΊΠΈ**: [sbezludny/javascript-style-guide](https://github.com/sbezludny/javascript-style-guide)
- :bg: **ΠΡΠ»Π³Π°ΡΡΠΊΠΈ**: [borislavvv/javascript-style-guide](https://github.com/sbezludny/javascript-style-guide)
## <a name='guide-guide'>JavaScript Π‘ΡΠΈΠ»ΠΎΠ²ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ</a>
- [Reference](https://github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide)
## <a name='authors'>Π‘ΡΡΡΡΠ΄Π½ΠΈΡΠΈ</a>
- [View Contributors](https://github.com/airbnb/javascript/graphs/contributors)
## <a name='license'>ΠΠΈΡΠ΅Π½Π·</a>
(The MIT License)
Copyright (c) 2012 Airbnb
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
**[[β¬]](#TOC)**
# };