2016-04-25 56 views
1

我很難理解爲什麼alert在下面的表達式中給我一個奇怪的東西。爲什麼javascript的alert會顯示數組和對象的奇怪值?

alert(!+{}[0]); //it shows "true" 

爲什麼「真」而不是「未定義」?

+0

[爲什麼要警告(!!「0」)和警報(false ==「0」))在JavaScript中輸出true的可能重複](http://stackoverflow.com/questions/4567393/why-do- alert0-and-alertfalse-0-both-output-true-in-javascript) – Boratzan

+1

因爲它在js中有些問題:https://www.destroyallsoftware.com/talks/wat – Sugar

+0

你認爲輸出_should_是什麼? – Andy

回答

0

一步一步走向:

{}[0] == undefined 
+undefined == NaN 
!NaN == true 
2

爲什麼 「真」,而不是 「未定義」?

因爲!是一個布爾運算符,它總是返回一個布爾值。它永遠不會產生值undefined

!false  // true 
!''  // true 
!null  // true 
!undefined // true 
!NaN  // true 
!0   // true 

相關:What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wat' talk for CodeMash 2012?

+0

那麼,它將我的所有表達式轉換爲「+」符號後的布爾值? – Alexey

+0

編號'!'帶*任何*值並將其轉換爲布爾值。 '+'將任何值轉換爲*數字*。 –

1

這是因爲NOT operator ! will always return a boolean value,所以如果你要檢查你的語句,你可以把它們分解如下:

{}[0]  // yields undefined 
+(undefined) // assumes arithemetic, but doesn't know how to handle it so NaN 
!(NaN)  // Since a boolean must be returned and something is there, return true 
0

的轉換這樣執行:

  1. !+{}[0]{}[0] - >undefined
  2. !+undefined+undefined - >NaN
  3. !NaNNaN是falsy - >false
  4. !false
  5. true

邏輯非!總是變換一個布爾基元類型的參數。
查看更多關於falsylogical not

相關問題