摘要:開門見題說出以下幾個(gè)表達(dá)式的結(jié)果張三張三補(bǔ)充知識要想回答上述問題,必須理解在執(zhí)行時(shí)候的一些數(shù)據(jù)轉(zhuǎn)換規(guī)則和成文的規(guī)定。根據(jù)上面第二條,寫的明明白白,結(jié)果是。。根據(jù),由于和指向不同引用,所以返回。
開門見題
說出以下幾個(gè)表達(dá)式的結(jié)果
var obj1 = { name: "張三"} var obj2 = obj1 var obj3 = { name: "張三"} null == undefined 123 == "123" false == 0 NaN == false obj1 == obj2 obj1 == obj3補(bǔ)充知識
要想回答上述問題,必須理解js在執(zhí)行==時(shí)候的一些數(shù)據(jù)轉(zhuǎn)換規(guī)則和成文的規(guī)定。ECMA-262對==的約定如下:
如果x和y的類型相同,
如果x是undefined,return true
如果x是null,return true
如果x是Number
x是NaN,return false
y是NaN,return false
x,y數(shù)值相同,return true
x是+0,y是-0,return true
x是-0,y是+0,return true
如果x是String,y必須和x長度內(nèi)容都相同才return true,否則return false
如果x是Boolean,x,y相同return true,否則return false
如果x,y引用同一個(gè)對象,return true,否則return false
x是null,y是undefined,return true
x是undefined,y是null,return true
x是Number,y是String,return x == ToNumber(y)
x是String,y是Number,return ToNumber(x) == y
x是Boolean,return ToNumber(x) == y
y是Boolean,return x == ToNumber(y)
x是String或Number,y是Object,return x == ToPrimitive(y)
x是Object,y是String或Number,return ToPrimitive(x) == y
return false
你可能注意到了這樣兩個(gè)函數(shù)
ToNumber()參數(shù)類型 | 結(jié)果 |
---|---|
Undefined | NaN |
Null | +0 |
Boolean | true為1,false為+0 |
Number | 參數(shù)本身 |
String | 簡單理解,能轉(zhuǎn)換成數(shù)字的就會(huì)轉(zhuǎn)換成數(shù)字,比如數(shù)字字符串,十六進(jìn)制的數(shù)字等,轉(zhuǎn)換失敗則返回NaN(詳見ECMA-262-9.3.1,內(nèi)容較多,不展開敘述) |
Object | 兩步轉(zhuǎn)換操作:1. ToPrimitive(input argument, hint Number) 2. ToNumber() |
參數(shù)類型 | 結(jié)果 |
---|---|
Undefined | 輸入值 |
Null | 輸入值 |
Boolean | 輸入值 |
Number | 輸入值 |
String | 輸入值 |
Object | 調(diào)用DefaultValue方法 |
好吧,又多了一個(gè)DefaultValue方法
ToPrimitive()細(xì)心的你發(fā)現(xiàn)上面ToNumber對于Object的轉(zhuǎn)換里有這么一句ToPrimitive(input argument, hint Number),就是說調(diào)用ToPrimitive的時(shí)候,除了傳入要轉(zhuǎn)化的值,還傳了一個(gè)hint參數(shù),這個(gè)參數(shù)可以為Number,也可以為String。那么什么時(shí)候傳入這兩個(gè)參數(shù),同時(shí)又有啥區(qū)別?
如果參數(shù)是hint Number:
先執(zhí)行valueOf,如果返回值是原始值,則返回原始值
否則執(zhí)行toString,如果返回值是原始值,則返回原始值
報(bào)錯(cuò)
如果參數(shù)是hint String:
先執(zhí)行toString,如果返回值是原始值,則返回原始值
否則執(zhí)行valueOf,如果返回值是原始值,則返回原始值
報(bào)錯(cuò)
如果input argument是內(nèi)置的Date類型,則參數(shù)是hint String,否則默認(rèn)hint Number。
回到題目說了這么多,我們回到上面的題目,一一解答:
null == undefined。根據(jù)上面第二條,寫的明明白白,結(jié)果是true。
123 == "123"。根據(jù)上面第四條return 123 == ToNumber("123"),而ToNumber("123")的結(jié)果為123,所以return 123 == 123,根據(jù)1-3-3,返回true。
false == 0。根據(jù)上面第六條,return ToNumber(false) == 0,而ToNumber(false)的值為+0,所以+0 == 0,根據(jù)1-3-3,返回true。
NaN == false??吹胶芏鄤e的同學(xué)說這里是做了各種類型轉(zhuǎn)換,其實(shí)我認(rèn)為這里是由于沒有匹配到任何規(guī)則,所以根據(jù)第十條返回false,也就是說并沒有做什么類型轉(zhuǎn)換。
obj1 == obj2。根據(jù)1-6,由于obj1和obj2指向同一個(gè)引用,所以返回true。
obj1 == obj3。根據(jù)1-6,由于obj1和obj2指向不同引用,所以返回false。
關(guān)于===把上面題目中的==換成===,試問結(jié)果會(huì)發(fā)生怎樣的變化?這里我就不說了,推理方式同上,根據(jù)如下規(guī)則,答案請各位看官自行補(bǔ)充。
如果x,y類型不同,return false
如果x是undefined,return true
如果x是null,return true
如果x是Number
如果x是NaN,return false
如果y是NaN,return false
x,y數(shù)值相同,return true
x是+0,y是-0,return true
x是-0,y是+0,return true
return false
如果x是String,y必須和x長度內(nèi)容都相同才return true,否則return false
如果x,y引用同一個(gè)對象,return true,否則return false
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108110.html
摘要:當(dāng)你使用的活動(dòng)監(jiān)視器你會(huì)發(fā)現(xiàn),實(shí)際的進(jìn)程數(shù)為菜鳥是因?yàn)榫€程池的原因嗎老鳥不錯(cuò)嘛,還知道線程池呢但非也非也。菜鳥竟然不是線程池老鳥你忽視了集成了引擎。啟動(dòng)后會(huì)創(chuàng)建實(shí)例,而實(shí)例是多線程的。 老鳥:伸著懶腰,看著窗外明媚的陽光,喝一口清茶,心情大美。一天的好心情莫過于此。老鳥:菜鳥,你這消失了大半個(gè)月,忙什么呢?菜鳥:聽說node最近很火,這不趁著年輕,多儲(chǔ)存點(diǎn)知識儲(chǔ)備呢!老鳥:那你說說你對...
摘要:與的映射關(guān)系為。與根對應(yīng)的對應(yīng)的層疊上下文,是其他的祖先,的范圍覆蓋整條。注意的默認(rèn)值為,自動(dòng)賦值為。對于,它會(huì)將賦予給對應(yīng)的,而則不會(huì)。 一、前言 ?假如只是開發(fā)簡單的彈窗效果,懂得通過z-index來調(diào)整元素間的層疊關(guān)系就夠了。但要將多個(gè)彈窗間層疊關(guān)系給處理好,那么充分理解z-index背后的原理及兼容性問題就是必要的知識...
摘要:機(jī)器學(xué)習(xí)中的偏差方差之間的權(quán)衡機(jī)器學(xué)習(xí)全部是關(guān)于給定輸入數(shù)據(jù)和給定輸出數(shù)據(jù),然后去尋找一個(gè)最佳映射函數(shù),這個(gè)映射函數(shù)通常也被叫做目標(biāo)函數(shù)。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:http://www.jianshu.com/p/f143... 我認(rèn)為對偏差 - 方差之間的權(quán)衡判讀對學(xué)習(xí)機(jī)器學(xué)習(xí)是非常重要的。那么為什么這么說呢?因?yàn)?..
摘要:上面的理解是錯(cuò)的,和返回就可以推翻。解釋不清楚和是相等的。和的規(guī)則類似,唯一少了轉(zhuǎn)換的一步。三高級階段參考規(guī)范真正理解真的如高設(shè)所說的那樣嗎其實(shí)不然。來分析一個(gè)經(jīng)典的例子,看完徹底理解的強(qiáng)制轉(zhuǎn)換。 showImg(https://segmentfault.com/img/remote/1460000011658462?w=512&h=321); 用中文怎么叫合適?相等?全等?其實(shí)并不合...
摘要:事件流是事件冒泡,而的事件流就是事件捕獲。所有現(xiàn)代瀏覽器都支持事件冒泡,并且會(huì)將事件一直冒泡到對象。事件捕獲的用以在于事件到達(dá)預(yù)定目標(biāo)之前捕獲它。事件流級事件規(guī)定事件流包括三個(gè)階段,事件捕獲階段處于目標(biāo)階段和事件冒泡階段。 最近在復(fù)習(xí)前端的基礎(chǔ),看到事件這一節(jié)的時(shí)候,剛好發(fā)現(xiàn)了筆記中一道特別好玩并且十分有趣的代碼,根據(jù)這么一道題目,基本上能夠把事件冒泡和事件捕獲的盲區(qū)給掃空。本文就帶你...
閱讀 3273·2021-09-22 16:06
閱讀 3260·2021-09-02 15:40
閱讀 642·2019-08-30 15:54
閱讀 1047·2019-08-26 12:22
閱讀 1391·2019-08-26 12:17
閱讀 2753·2019-08-26 12:09
閱讀 513·2019-08-26 10:20
閱讀 796·2019-08-23 16:28