Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
typeof age !== "undefined" плохой вариант. Лучше использовать сравнение непосредственно с undefined age !== undefined(function(window, $, undefined){
// ваш код
// window и jQuery – просто для примера
// главное, чтоб на вход всегда ничего не передавалось для переменной undefined
}(window, jQuery))
age !== void 0
typeof age !== «undefined» плохой вариант. Лучше использовать сравнение непосредственно с undefined
age !== undefined
(function() {
var undefined = 1;
console.log(undefined); // 1
console.log(typeof undefined); // number
console.log(typeof a); // undefined
})();
age !== undefined, выбьет ReferenceError: age is not defined же. typeof age !== "undefined" лишен этого недостатка.foo.bar != null, потому что свойства ReferenceError не выбрасывают.undefined, и требует чтобы код продолжал работать?Math = 0» и посмотреть, как его раскосячит.void 0, можно избежать долгого разрешения переменной undefined из глобала через всю цепочку скопов. Но в последнем хроме void 0 работает даже чуть медленнее.var options = {
case1: function () { ... },
case2: function () { ... },
...,
'default': function () { ... }
};
options[value||'default']();"8.97"|0; // 8
8.97|0; // 8
"8.01"|0; // 8
"a801"|0; // 0
"801a"|0; //0
if (~arr.indexOf('val')) {
// Элемент в массиве есть
}
var arr = [1,2,3,4];
arr.length = 0; // очищает массив
var arr = [1,2,3,4];
arr.length = 0; // 15 символов
arr = []; // 9 символов
// Толи дело:
var arr = [4, 9, "e", 123, 321];
arr.length = 2;
arr; // [4, 9]
arr.length изменяет существующий массив, в то время как присваивание пустого массива создает новый массив. Иногда это может быть важно.var arr = [1, 2, 3, 4];
arr.testProperty = true;
arr.length = 0;
arr.testProperty; // -> true
arr === arr; // true
var old = arr;
arr = [];
arr.testProperty; // -> undefined
old === arr; // falseif (!age) {
age = 10;
}
a and b or c (в отличие от того же Python b здесь не должно быть всего лишь nil и false, что сильно расширяет область применимости).$?), что практически бесполезно. Конструкция $(( a || b )) может вернуть только 1 или 0.age = age || 10 будет восприниматься именно так: «если возраст не определён, то он равен 10». Вам нужно обновить свою версию «встроенного в мозг интерпретатора»: он вполне способен по ходу дела повышать уровень абстрагирования. Не думаю, что тут имеет смысл сравнивать энергетические затраты на повышение уровня с затратами на чтение вчетверо большего числа строчек.|| всегда лучше:this.age = age || 10;
this.sex = sex || "Male";
if (!age) {
age = 10;
}
if (!sex) {
sex = 10;
}
this.age = age;
this.sex = sex;
hasOwnProperty.age?this.age = age || 10;).||. Супер! Будучи применённой к значениям внутри по‐первости (если о новичках: людях, плохо знакомых с вашим кодом) непонятного объекта defs (definitions? defaults? ещё что‐то?) она, разумеется, становится понятнее, чем в this.age = age || 10;.defs понадобится только, если переменных уж слишком много: в этом случае для установки значений будет использоваться функция вида mergeObjects(this, args, defaults), а все переменные будут в объекте args.+"123" лучше, чем используя parseFloat/parseInt тем, что parse* для строки "123foobar" вернут 123, тогда как +"123foobar" вернет NaN.a >>> 0 работает, как приведение числа к uint32_t:12345 >>> 0 // 12345
-12345 >>> 0 // 4294954951
12345678901 >>> 0 // 3755744309Работает лучше, чем a & 0xFFFFFFFF, из-за явной беззнаковости.var arr = [], i = 0, obj = {a:1,b:2,c:3};
for( arr[i++] in obj );
// arr = ['a','b','c']
если вы поместите объект в условный оператор if, то он выполнит либо true-ветку кода (когда объект имеет значение true), либо выполнит false-ветку (соответственно, когда объект имеет значение false).
Однако стоит заметить, что с таким способом вам не удастся задать переменной значение 0, так как 0 является ложным выражением.

В JavaScript || является примером выполнения короткого замыкания.
Однако стоит заметить, что с таким способом вам не удастся задать переменной значение 0, так как 0 является ложным выражением.
function x(x){alert(x||0)};x(); //0Конвертация строки в число с помощью оператора +И не только строки:
+new Date
В общем случае унарный плюс форсит вызов valueOf.Скорее всего, вы бы применили методы parseFloat и parseInt.В очередной раз незаслуженно не упоминается функция и конструктор
Number. Функции parseInt и parseFloat делают несколько больше, чем конвертация в число. Наиболее близкий аналог это «выковыривание» числа из числоподобной строки. Для конвертации лучше прямолинено использовать конструктор Number.['1','2','3'].map(parseInt);
['1','2','3'].map(Number);
С другой стороны, вместо if (x == «test») можно просто написать if (x). Если же x будет пустой переменной, то просто выполнится код из блока else.
var объявляет переменную в скопе на уровне функции. Если перемнная явно не объявлена, она она через механизм делегирования берётся из верхних скопов.this определяется при вызове, а не при создании.function Foo(){};
Foo.prototype.bar = 42;
var foo = new Foo();
console.log(foo.bar); // 42
Foo.prototype.bar = 32;
console.log(foo.bar); // 32
class Foo:
bar = 42
foo = Foo()
print foo.bar # 42
Foo.bar = 32
print foo.bar # 32
Значения приводятся к нужному типу, если это возможно. У объектов приведения к примитивам для это дёргаются методы valueOf и toString.
Если хотя бы один операнд — строка, то весь оператор строка работает как конкатенация.
var объявляет переменную в скопе на уровне функции. Если перемнная явно не объявлена, она она через механизм делегирования берётся из верхних скопов.
Если у объекта нет свойства, она через механизм делегирования берётся из прототипа.
this определяется при вызове, а не при создании.
В других языках это либо запрещено, либо есть специальный оператор конкатенации.Извините, мне стало смешно. Наверное, C#, Java и Python слишком мало распространены…
с == true надуманны. Вы видели, чтобы кто-то так писал на практике, сравнивая я true явно, причем двойным равно? Но так или иначе — тут оба операнда приводятся к числу, и никакой магии нет. И это, кстати, ничем не лучше пхпшного isEmpty().Пробрасывать целый скоуп в функцию при помощи apply
5 популярных JavaScript-хаков