国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

你真的理解==和===嗎

Barrior / 2752人閱讀

摘要:開門見題說出以下幾個(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和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()
ToPrimitive()
參數(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

如果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

相關(guān)文章

  • 大話-node真的是單線程

    摘要:當(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ǔ)備呢!老鳥:那你說說你對...

    Yang_River 評論0 收藏0
  • CSS魔法堂:真的理解z-index?

    摘要:與的映射關(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背后的原理及兼容性問題就是必要的知識...

    andycall 評論0 收藏0
  • 真的理解機(jī)器學(xué)習(xí)中偏差 - 方差之間的權(quán)衡

    摘要:機(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)?..

    lastSeries 評論0 收藏0
  • 真的理解=====的區(qū)別

    摘要:上面的理解是錯(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í)并不合...

    TwIStOy 評論0 收藏0
  • 真的理解事件冒泡事件捕獲?

    摘要:事件流是事件冒泡,而的事件流就是事件捕獲。所有現(xiàn)代瀏覽器都支持事件冒泡,并且會(huì)將事件一直冒泡到對象。事件捕獲的用以在于事件到達(dá)預(yù)定目標(biāo)之前捕獲它。事件流級事件規(guī)定事件流包括三個(gè)階段,事件捕獲階段處于目標(biāo)階段和事件冒泡階段。 最近在復(fù)習(xí)前端的基礎(chǔ),看到事件這一節(jié)的時(shí)候,剛好發(fā)現(xiàn)了筆記中一道特別好玩并且十分有趣的代碼,根據(jù)這么一道題目,基本上能夠把事件冒泡和事件捕獲的盲區(qū)給掃空。本文就帶你...

    Cheriselalala 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<