На данный вопрос уже ответили:
var obj = {};
var x = obj.zz || 2; // почему эта строчка так срабатывает?
alert(x); // выводит 2
obj.zz == undefined
это понятно, поэтому он вычисляет второй аргумен 2, но почему результат выражения кладётся в x?
Почему он туда не true
кладёт, если операция булевская?
К чему вопрос возник. Ищу аналог ??
из C#.
int? pageFromUrl;
int page = pageFromUrl ?? 1;
Правильно ли я понимаю что obj.zz || 2
из JavaScript это аналог obj.zz ?? 2
из C#?
Из спецификации.
Note: the value produced by a && or || operator is not necessarily of type Boolean. The value produced will always be the value of one of the two operand expressions.
По-русски.
Заметьте: значение, возвращаемое опретором && или опретором || не обязательно типа Boolean. Однако это значение всегда будет одного типов операндов.
Что это значит?
false || true
Вернет true
.
false || 1
Вернет 1
0 || "str"
Вернет str
При этом если оба операнда - thruthy, то вернется первый из них:
true || 1
Вернет true
А если оба операнда - falthy, то вернется последний:
false || 0
Вернет 0
Почему он туда не true кладёт, если операция булевская?
Верно подмечено, на самом деле. Но то, что операция логическая не значит, что и возвращаемое значение будет представлено Boolean значением, как видно из примеров выше и как указано в спецификации.
В общем, как я понимаю, это еще один из "трюков" js:
a = a || 0
превратит a
из любого "falsey"-значения в 0 (извините, даже не представляю, как это правильно перевести.
При этом, к falssey значениям отноcятся:
false
null
undefined
0
""
(empty string)NaN
(not a Number)Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хочу написать второй метод ToString(Object obj) через лямбда выражение:
Хочу массиву кнопкам, из 10 кнопок передать в событие OnClick метод Appropriation(i), с аргументом i, который будет увеличиватьсяСуть: кнопка 1 имеет OnClick...
Изучаю BackgroundWorker, решил попробовать на своей программе (при проверке обновлений), добавив BackgroundWorkerВроде сделал всё примерно как на msdn, но программа...