Будет ли `if (x = y)` когда-либо возвращать false или потерпеть неудачу в JavaScript? - PullRequest
2 голосов
/ 04 ноября 2010

Это теоретический вопрос, поскольку я не представляю себе практического применения.

Сегодня я сделал смелое заявление о том, что в JavaScript следующее всегда будет возвращать true:

if (x=y){
    //code
}

И //code, что бы это ни было, всегда будет выполняться.

Это классическая опечатка: не вводить == или даже ===.

Эта функция также может быть продемонстрирована на C / C ++, но, поскольку языки с более строгой типизацией, чем JavaScript, нетрудно придумать случаи, когда это назначение не будет выполнено.

Однако в JavaScript, учитывая две переменные x и y, я изо всех сил пытался придумать случай, когда это не получится, или исходный блок условного кода не будет выполнен.

Любой

Ответы [ 3 ]

14 голосов
/ 04 ноября 2010

Он (x = y) будет иметь значение false, если y = 0, y = null, y = undefined или y = false.

Редактировать: Также, если y = NaN

Редактировать: Также, если y = ""

1 голос
/ 04 ноября 2010
js
js> if(x=y){
print('hello');
}
typein:1: ReferenceError: y is not defined
js> 
1 голос
/ 04 ноября 2010

Условный блок "x = y" будет выполняться всегда. Но в javascript "false", undefined, null и 0 оцениваются как false. Таким образом, всякий раз, когда y является одним из этих значений, код «//» не будет выполняться.

...