node.js - JavaScript的一個(gè)不能理解的地方
問(wèn)題描述
最近在學(xué)JavaScript(NodeJs)在用for遍歷一個(gè)JsonArray的時(shí)候發(fā)現(xiàn)了一個(gè)問(wèn)題我當(dāng)時(shí)是這樣子寫(xiě)的:
按道理來(lái)說(shuō)這樣寫(xiě)應(yīng)該是錯(cuò)的,應(yīng)該要判斷是不是為Null,但是我運(yùn)行了一下,居然成功了,沒(méi)有報(bào)錯(cuò),輸出也正常黑人問(wèn)號(hào)臉...求告知這是什么原理...難道obj2=obj1.result[i]會(huì)返回一個(gè)boolean??之前學(xué)過(guò)JAVA,感覺(jué)JavaScript相對(duì)JAVA有點(diǎn)不嚴(yán)謹(jǐn),思想有點(diǎn)被禁錮...
問(wèn)題解答
回答1:賦值表達(dá)式會(huì)返回所賦的值。也就是說(shuō)obj2=obj1.result[i]會(huì)返回obj1.result[i]。
js是動(dòng)態(tài)語(yǔ)言,它有隱私轉(zhuǎn)換的特性,就是在該需要用到某種數(shù)據(jù)類(lèi)型的時(shí)候,它會(huì)通過(guò)預(yù)先的規(guī)則來(lái)將傳進(jìn)來(lái)的值轉(zhuǎn)換成特定的類(lèi)型。
那么在剛剛賦值表達(dá)式obj2=obj1.result[i]中返回值是obj1.result[i],那js引擎就會(huì)對(duì)obj1.result[i]進(jìn)行類(lèi)型轉(zhuǎn)換成Boolean類(lèi)型。
如果你obj1.result[i]的值是除NaN,0,undefined,null,’’之外的其他值,都會(huì)轉(zhuǎn)換成true,否則則是false。
回答2:賦值運(yùn)算符的返回結(jié)果就是這個(gè)被賦值的值,這個(gè)在各大類(lèi) C 的語(yǔ)言里,包括 Java 都是這樣定義的,不足為奇。
Java 里條件判斷只能用布爾值,而 JavaScript 不一樣,這里需要一個(gè)布爾值你給的如果不是一個(gè)布爾值就會(huì)隱式轉(zhuǎn)換成布爾值。
回答3:javascript是弱類(lèi)型的語(yǔ)言,會(huì)自動(dòng)轉(zhuǎn)的~
回答4:一個(gè)等于號(hào) 是賦值的意思,等于你把obj1.result[i]賦給obj2了,所以一直成立
你可以去搜一下 = == ===的區(qū)別 看看題就懂了
相關(guān)文章:
1. debian - docker依賴(lài)的aufs-tools源碼哪里可以找到啊?2. dockerfile - 我用docker build的時(shí)候出現(xiàn)下邊問(wèn)題 麻煩幫我看一下3. docker網(wǎng)絡(luò)端口映射,沒(méi)有方便點(diǎn)的操作方法么?4. docker-compose 為何找不到配置文件?5. macos - mac下docker如何設(shè)置代理6. docker start -a dockername 老是卡住,什么情況?7. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????8. 如何解決Centos下Docker服務(wù)啟動(dòng)無(wú)響應(yīng),且輸入docker命令無(wú)響應(yīng)?9. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問(wèn)題。10. docker gitlab 如何git clone?

網(wǎng)公網(wǎng)安備