2016-03-03 4 views
0

Интересно, это они абсолютно одинаковые:Операторы === и ||

var a = something1.something2 === undefined ? 1 : something1.something2; 
var b = something1.something2 || 1; 

ответ

4

No. В первом, something1.something2имеет быть для того, чтобы получить значение 1undefined. Во втором он просто должен быть ложным. Существует множество falsy values: 0, "", NaN, null, undefined, и, конечно, false.

+0

'undefined' также можно переопределить ...' typeof v == 'undefined'' следует использовать ... – deceze

+2

@deceze: Нет, более эффективный способ борьбы с ним - найти тех, кто переопределяет 'undefined' as что-то другое, чем «неопределенное», и избивали их о голову и плечи холодными, влажными спагетти, пока они не опомнились. –

+1

@ T.J. Да, разумное решение. – deceze

0

Нет, они не являются.

Если вы принимаете значение 0 за something1.something2, то в первом случае возвращаемое значение равно 0.

Второй случай возвращает 1, из-за значения фальши 0.

Смежные вопросы