3 回答

TA貢獻(xiàn)1783條經(jīng)驗 獲得超4個贊
首先,為了完整性:
('0' ? 'a' : 'b')
之所以為'a',是因為它'0'是一個非空字符串,其總值為true:
字符串:如果參數(shù)為空字符串(其長度為零),則結(jié)果為false;否則為false。否則結(jié)果為true。
現(xiàn)在到'0' == true。
這里將進行兩次類型轉(zhuǎn)換。我們可以在規(guī)范的第11.9.3節(jié)“抽象平等比較算法”中遵循這一要求。
操作數(shù)表示為x和y(x == y)。
在我們的例子中,x是一個字符串('0')和y一個布爾值(true)。因此,執(zhí)行步驟7:
如果Type(y)為布爾型,則返回比較結(jié)果x == ToNumber(y)。
將布爾值轉(zhuǎn)換為數(shù)字時,將進行以下轉(zhuǎn)換:
布爾值:如果參數(shù)為true,則結(jié)果為1。如果參數(shù)為false,則結(jié)果為+0。
現(xiàn)在我們有
'0' == 1
符合步驟5中的條件:
如果Type(x)為String,Type(y)為Number,則返回比較結(jié)果ToNumber(x)== y。
如何將字符串轉(zhuǎn)換為數(shù)字更為復(fù)雜,但是當(dāng)然也可以在規(guī)范中找到。
所以最后的比較是
0 == 1
這是false(步驟1. a。vi。)

TA貢獻(xiàn)1839條經(jīng)驗 獲得超15個贊
主要是因為JavaScript在真實性方面相當(dāng)不一致。但是答案是:
在這種情況下,“ 0”直接轉(zhuǎn)換為布爾值,而“ 0”(非空字符串)為true。
在這種情況下,不會進行任何轉(zhuǎn)換;字符串不等于布爾值。
添加回答
舉報