node.js - JavaScript的一個不能理解的地方
問題描述
最近在學JavaScript(NodeJs)在用for遍歷一個JsonArray的時候發現了一個問題我當時是這樣子寫的:按道理來說這樣寫應該是錯的,應該要判斷是不是為Null,但是我運行了一下,居然成功了,沒有報錯,輸出也正常黑人問號臉...求告知這是什么原理...難道obj2=obj1.result[i]會返回一個boolean??之前學過JAVA,感覺JavaScript相對JAVA有點不嚴謹,思想有點被禁錮...
問題解答
回答1:賦值表達式會返回所賦的值。也就是說obj2=obj1.result[i]會返回obj1.result[i]。
js是動態語言,它有隱私轉換的特性,就是在該需要用到某種數據類型的時候,它會通過預先的規則來將傳進來的值轉換成特定的類型。
那么在剛剛賦值表達式obj2=obj1.result[i]中返回值是obj1.result[i],那js引擎就會對obj1.result[i]進行類型轉換成Boolean類型。
如果你obj1.result[i]的值是除NaN,0,undefined,null,’’之外的其他值,都會轉換成true,否則則是false。
回答2:賦值運算符的返回結果就是這個被賦值的值,這個在各大類 C 的語言里,包括 Java 都是這樣定義的,不足為奇。
Java 里條件判斷只能用布爾值,而 JavaScript 不一樣,這里需要一個布爾值你給的如果不是一個布爾值就會隱式轉換成布爾值。
回答3:javascript是弱類型的語言,會自動轉的~
回答4:一個等于號 是賦值的意思,等于你把obj1.result[i]賦給obj2了,所以一直成立
你可以去搜一下 = == ===的區別 看看題就懂了
相關文章:
1. javascript - 關于css絕對定位在ios瀏覽器被橡皮筋遮擋的問題2. javascript - 請教如何獲取百度貼吧新增的兩個加密參數3. mysql - 分庫分表、分區、讀寫分離 這些都是用在什么場景下 ,會帶來哪些效率或者其他方面的好處4. Python爬蟲如何爬取span和span中間的內容并分別存入字典里?5. javascript - 請問 chrome 為什么會重復加載圖片資源?6. c++ - 請問MySQL_Connection::isReadOnly 怎么解決?7. css3 - 微信前端頁面遇到的transition過渡動畫的bug8. (python)關于如何做到按win+R再輸入文件文件名就可以運行?9. python - 能通過CAN控制一部普通的家用轎車嗎?10. html5 - 只用CSS如何實現input框的寬度隨框里輸入的內容長短自動適應?
