node.js - JavaScript的一個(gè)不能理解的地方
問題描述
最近在學(xué)JavaScript(NodeJs)在用for遍歷一個(gè)JsonArray的時(shí)候發(fā)現(xiàn)了一個(gè)問題我當(dāng)時(shí)是這樣子寫的:按道理來說這樣寫應(yīng)該是錯的,應(yīng)該要判斷是不是為Null,但是我運(yùn)行了一下,居然成功了,沒有報(bào)錯,輸出也正常黑人問號臉...求告知這是什么原理...難道obj2=obj1.result[i]會返回一個(gè)boolean??之前學(xué)過JAVA,感覺JavaScript相對JAVA有點(diǎn)不嚴(yán)謹(jǐn),思想有點(diǎn)被禁錮...
問題解答
回答1:賦值表達(dá)式會返回所賦的值。也就是說obj2=obj1.result[i]會返回obj1.result[i]。
js是動態(tài)語言,它有隱私轉(zhuǎn)換的特性,就是在該需要用到某種數(shù)據(jù)類型的時(shí)候,它會通過預(yù)先的規(guī)則來將傳進(jìn)來的值轉(zhuǎn)換成特定的類型。
那么在剛剛賦值表達(dá)式obj2=obj1.result[i]中返回值是obj1.result[i],那js引擎就會對obj1.result[i]進(jìn)行類型轉(zhuǎn)換成Boolean類型。
如果你obj1.result[i]的值是除NaN,0,undefined,null,’’之外的其他值,都會轉(zhuǎn)換成true,否則則是false。
回答2:賦值運(yùn)算符的返回結(jié)果就是這個(gè)被賦值的值,這個(gè)在各大類 C 的語言里,包括 Java 都是這樣定義的,不足為奇。
Java 里條件判斷只能用布爾值,而 JavaScript 不一樣,這里需要一個(gè)布爾值你給的如果不是一個(gè)布爾值就會隱式轉(zhuǎn)換成布爾值。
回答3:javascript是弱類型的語言,會自動轉(zhuǎn)的~
回答4:一個(gè)等于號 是賦值的意思,等于你把obj1.result[i]賦給obj2了,所以一直成立
你可以去搜一下 = == ===的區(qū)別 看看題就懂了
相關(guān)文章:
1. javascript - 我的站點(diǎn)貌似被別人克隆了, google 搜索特定文章,除了域名不一樣,其他的都一樣,如何解決?2. [python2]local variable referenced before assignment問題3. html - 移動端radio無法選中4. php - 微信開發(fā)驗(yàn)證服務(wù)器有效性5. 求救一下,用新版的phpstudy,數(shù)據(jù)庫過段時(shí)間會消失是什么情況?6. javascript - 求幫助 , ATOM不顯示界面!!!!7. Python2中code.co_kwonlyargcount的等效寫法8. javascript - vue+iview upload傳參失敗 跨域問題后臺已經(jīng)解決 仍然報(bào)403,這是怎么回事啊?9. javascript - [MUI 子webview定位]10. mysql - 請問數(shù)據(jù)庫字段為年月日,傳進(jìn)的參數(shù)為月,怎么查詢那個(gè)月所對應(yīng)的數(shù)據(jù)
