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. android - 安卓做前端,PHP做后臺(tái)服務(wù)器 有什么需要注意的?2. docker不顯示端口映射呢?3. mysql - 我用SQL語(yǔ)句 更新 行的時(shí)候,發(fā)現(xiàn)全部 中文都被清空了,請(qǐng)問(wèn)怎么解決?4. python - 子進(jìn)程執(zhí)行完成為僵尸進(jìn)程,怎么解決5. python - xpath提取網(wǎng)頁(yè)路徑?jīng)]問(wèn)題,但是缺失內(nèi)容?6. javascript - 求教各位,本地HTML頁(yè)面怎么在DIV中嵌套服務(wù)器上的頁(yè)面內(nèi)容?不用iframe。7. python-mysql Commands out of sync8. java中返回一個(gè)對(duì)象,和輸出對(duì)像的值,意義在哪兒9. javascript - 給某個(gè)類(lèi)添加一個(gè)偽類(lèi),這個(gè)類(lèi)有click事件,現(xiàn)在我點(diǎn)擊偽類(lèi)也觸發(fā)了click事件10. docker images顯示的鏡像過(guò)多,狗眼被亮瞎了,怎么辦?
