最近在學JavaScript(NodeJs)在用for遍歷一個JsonArray的時候發現了一個問題我當時是這樣子寫的:照道理來說這樣寫應該是錯的,應該要判斷是不是為Null,但是我運行了一下,居然成功了,沒有報錯,輸出也正常黑人問號臉...求告知這是什麼原理...難道obj2=obj1.result[i]會回傳一個boolean? ? 之前學過JAVA,感覺JavaScript相對JAVA有點不嚴謹,思想有點被禁錮...
obj2=obj1.result[i]
ringa_lee
賦值表達式會傳回所賦的值。也就是說obj2=obj1.result[i]会返回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。
NaN
0
undefined
null
''
true
false
賦值運算子的回傳結果就是這個被賦值的值,這個在各大類 C 的語言裡,包括 Java 都是這樣定義的,不足為奇。
Java 裡條件判斷只能用布林值,而 JavaScript 不一樣,這裡需要一個布林值你給的如果不是一個布林值就會隱式轉換成布林值。
javascript是弱型的語言,會自動轉的~
一個等於號 是賦值的意思,等於你把obj1.result[i]賦給obj2了,所以一直成立
你可以去搜尋 = == ===的差別 看看題目就懂了
賦值表達式會傳回所賦的值。也就是說
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
。賦值運算子的回傳結果就是這個被賦值的值,這個在各大類 C 的語言裡,包括 Java 都是這樣定義的,不足為奇。
Java 裡條件判斷只能用布林值,而 JavaScript 不一樣,這裡需要一個布林值你給的如果不是一個布林值就會隱式轉換成布林值。
javascript是弱型的語言,會自動轉的~
一個等於號 是賦值的意思,等於你把obj1.result[i]賦給obj2了,所以一直成立
你可以去搜尋 = == ===的差別 看看題目就懂了