第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

空數(shù)組似乎同時(shí)等于true和false。

空數(shù)組似乎同時(shí)等于true和false。

肥皂起泡泡 2019-07-27 15:15:27
空數(shù)組似乎同時(shí)等于true和false??諗?shù)組是真,但它們也等于false。var arr = [];console.log('Array:', arr);if (arr) console.log("It's true!");if (arr == false) console.log("It's false!");if (arr && arr == false) console.log("...what??");我想這是由于等式運(yùn)算符所操作的隱式轉(zhuǎn)換。有人能解釋幕后發(fā)生了什么嗎?
查看完整描述

3 回答

?
炎炎設(shè)計(jì)

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊

你在這里測(cè)試不同的東西。

if (arr)調(diào)用對(duì)象(Array是JS中對(duì)象的實(shí)例)將檢查對(duì)象是否存在,并返回true/false。

當(dāng)你打電話if (arr == false)你比較價(jià)值這個(gè)物體和原語false價(jià)值。在內(nèi)部,arr.toString()調(diào)用,它返回空字符串。"".

這是因?yàn)?/trans>toString調(diào)用數(shù)組返回Array.join()空字符串是JavaScript中的假值之一。



查看完整回答
反對(duì) 回復(fù) 2019-07-28
?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊

關(guān)于這一行:

if (arr == false) console.log("It's false!");

也許這些會(huì)有幫助:

console.log(0 == false) // trueconsole.log([] == 0) // trueconsole.log([] == "") // true

我認(rèn)為正在發(fā)生的是布爾值false被迫0用于與物體(左手邊)進(jìn)行比較。對(duì)象被強(qiáng)制為字符串(空字符串)。然后,空字符串也被脅迫成一個(gè)數(shù)字,即零。所以最后的比較是0 == 0,也就是true.

編輯:看見規(guī)范的這一部分有關(guān)此操作的詳細(xì)信息。

下面是正在發(fā)生的事情,從規(guī)則1開始:

1.如果類型(X)與類型(Y)不同,則轉(zhuǎn)到步驟14。

下一個(gè)適用的規(guī)則是#19:

19.如果類型(Y)是布爾型,則返回比較x=ToNumber(Y)的結(jié)果。

結(jié)果ToNumber(false)0,我們現(xiàn)在有:

[] == 0

同樣,規(guī)則1告訴我們跳到第14步,但實(shí)際適用的下一步是#21:

21.如果Type(X)是Object,Type(Y)是字符串或數(shù)字,則返回比較ToPrimitive(X)=y的結(jié)果。

結(jié)果ToPrimitive([])是空字符串,所以我們現(xiàn)在有:

"" == 0

同樣,規(guī)則#1告訴我們跳到步驟#14,但實(shí)際適用的下一步是#17:

17.如果Type(X)是String,Type(Y)是Number,則返回比較ToNumber(X)=y的結(jié)果。

結(jié)果ToNumber("")0,這就給我們留下了:

0 == 0

現(xiàn)在,這兩個(gè)值都具有相同的類型,因此這些步驟從#1一直持續(xù)到#7,如下所示:

7.如果x是與y相同的數(shù)字值,則返回true。

所以,我們回來true.

簡(jiǎn)言之:

ToNumber(ToPrimitive([])) == ToNumber(false)



查看完整回答
反對(duì) 回復(fù) 2019-07-28
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

解釋為什么ToPrimitive([])回報(bào)""對(duì)于“為什么”這個(gè)問題,有兩種可能的答案是值得考慮的。第一種回答是:“因?yàn)橐?guī)范上說這就是JavaScript的行為方式?!痹贓S5規(guī)范中,第9.1節(jié),它將ToPrimitive的結(jié)果描述為對(duì)象的默認(rèn)值:

對(duì)象的默認(rèn)值是通過調(diào)用對(duì)象的[DefaultValue]內(nèi)部方法來檢索的,并傳遞可選的提示PreferredType。

第8.12.8節(jié)描述[[DefaultValue]]方法。此方法以“提示”作為參數(shù),提示可以是字符串,也可以是數(shù)字。若要簡(jiǎn)化此事項(xiàng),請(qǐng)不要使用某些細(xì)節(jié),如果提示為字符串,則[[DefaultValue]]返回toString()如果存在并返回原語值,則返回valueOf()..如果提示為數(shù)字,則toString()valueOf()是相反的,所以valueOf()首先調(diào)用,如果它是原語,則返回它的值。因此,是否[[DefaultValue]]返回toString()valueOf()取決于對(duì)象的指定PreferredType以及這些函數(shù)是否返回原語值。

默認(rèn)valueOf()對(duì)象方法只返回對(duì)象本身,這意味著除非類重寫默認(rèn)方法,valueOf()只返回對(duì)象本身。情況就是這樣Array[].valueOf()返回對(duì)象[]本身。因?yàn)?/trans>Array對(duì)象不是原語,[[DefaultValue]]提示無關(guān):數(shù)組的返回值將是toString().

引用大衛(wèi)弗拉納根JavaScript:權(quán)威指南順便說一句,這是一本很棒的書,每個(gè)人都應(yīng)該首先找到這些問題的答案:

此對(duì)象到數(shù)字轉(zhuǎn)換的詳細(xì)信息解釋了為什么空數(shù)組轉(zhuǎn)換為數(shù)字0,以及為什么具有單個(gè)元素的數(shù)組也可以轉(zhuǎn)換為數(shù)字。數(shù)組繼承了返回對(duì)象而不是原始值的默認(rèn)值()方法,因此數(shù)組到數(shù)字的轉(zhuǎn)換依賴于toString()方法。空數(shù)組轉(zhuǎn)換為空字符串??兆址D(zhuǎn)換為數(shù)字0。具有單個(gè)元素的數(shù)組將轉(zhuǎn)換為與一個(gè)元素相同的字符串。如果數(shù)組包含單個(gè)數(shù)字,則將該數(shù)字轉(zhuǎn)換為字符串,然后返回到數(shù)字。

對(duì)“為什么”問題的第二種回答,除了“因?yàn)橐?guī)范說”,從設(shè)計(jì)的角度解釋了為什么行為是有意義的。在這個(gè)問題上,我只能猜測(cè)。首先,如何將數(shù)組轉(zhuǎn)換為數(shù)字?我能想到的唯一明智的可能性是將一個(gè)空數(shù)組轉(zhuǎn)換為0,將任何非空數(shù)組轉(zhuǎn)換為1,但正如韋恩的回答所揭示的,在許多類型的比較中,一個(gè)空數(shù)組將被轉(zhuǎn)換為0。除此之外,很難為Array.value eOf()找到一個(gè)合理的原始返回值。因此,人們可能會(huì)說,這只是更有意義的Array.valueOf()是默認(rèn)的,并返回Array本身,導(dǎo)致toString()是ToPrimitive使用的結(jié)果。將Array轉(zhuǎn)換為字符串而不是數(shù)字更有意義。

此外,正如弗拉納根的引語所暗示的那樣,這個(gè)設(shè)計(jì)決策確實(shí)允許某些類型的有益行為。例如:

var a = [17], b = 17, c=1;console.log(a==b);      // <= trueconsole.log(a==c);      // <= false

此行為允許您將單個(gè)元素?cái)?shù)組與數(shù)字進(jìn)行比較,并獲得預(yù)期的結(jié)果。




查看完整回答
反對(duì) 回復(fù) 2019-07-28
  • 3 回答
  • 0 關(guān)注
  • 445 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)