鍍金池/ 問答/HTML/ js 條件判斷a == ("" || undefined)的

js 條件判斷a == ("" || undefined)的問題?

圖片描述

var a = "";
if (a == ("" || undefined)) {
    a = 1;
}
console.log(a);

我一直以為這里會打印輸出 1,但實際上不是,我很奇怪,直到突發(fā)奇想試試 ("" || undefined) 看它返回了undefined,很奇怪來著。

我一直以為,上面的條件判斷是 a 分別與 ""undefined 比較,只要有一個符合就進行賦值,但現(xiàn)在看來實際上不是的,這里 a 只與 undefined 比較,這我就奇怪了,難道是 () 內(nèi)先比較,然后返回一個 true 值繼續(xù)和 a 比較?但是 ""undefined 都應該對應 false 啊?

求大神們解惑,謝謝!

回答
編輯回答
黑與白

Javascript中,比如一個變量a,如果判斷a是不是undefined 不是用: a === "undefined"
而是用typeof a === "undefined"
好多人犯這錯誤啊。。

====
感謝樓下提醒,undefined加"" 。。

2017年12月13日 18:17
編輯回答
浪蕩不羈

原因樓上大神已經(jīng)說了。想達到你要的效果比較短的寫法是["", undefined].includes(a)

2017年9月5日 20:49
編輯回答
病癮

對于的你的問題,jjc大大已經(jīng)說的差不多了。但是我補充一點:你說的最后一句話但是 "" 和 undefined 都應該對應 false 啊? 是不對的

這一看就是沒有看標準啊,按照自己的理解了

對比==這個操作符的標準是這樣說的:
圖片描述

  1. 如果x和y的類型一樣,就去嚴格比較返回結(jié)果

  2. 如果x的類型是null,y的類型是undefined,返回true

  3. 如果x的類型是undefined,y的類型是null,返回true

......等等

你對比一下,你的類型一個是string一個是undefined 前幾條沒有符合的,就去找了最后一條,所以返回了false

2017年11月13日 20:21
編輯回答
孤毒

莫非你之前是學 C 語言的?

在 javascript 中,|| 的結(jié)果并不是 boolean 值,并不是 true 或者 false。

https://developer.mozilla.org...

邏輯或 (||)

expr1 || expr2

如果 expr1 能轉(zhuǎn)換成 true 則返回expr1,否則返回 expr2

當 expr1 為 false 時,直接返回 expr2。

a == ("" || undefined)

根據(jù)優(yōu)先級,首先執(zhí)行 ("" || undefined) 結(jié)果是 undefined,然后再執(zhí)行 a == undefined 結(jié)果是 false


你提到的:

a 分別與 ""undefined 比較,只要有一個符合就進行賦值

這句話寫出來應該是這樣的:

a == "" || a == undefined

2017年9月7日 15:58