2010-12-22 53 views
17

我正在瀏覽html 5的書,它包含js的這個tid位。雙重驚歎是什麼意思?在javascript中返回值的雙重感嘆號

return ! ! document.createElement('video').canPlayType; 
+4

必須愛它,在編程語言中有用的雙重否定。我的英語老師說永遠不要使用雙重否定。 「我不想無所事事。」成爲現在可能有意義的句子。 :) – 2010-12-22 19:07:33

+1

我可能是一個想法,首先嚐試搜索之前詢問stackoverflow。 http://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript – KooiInc 2010-12-22 19:07:36

回答

20

!操作者否定,並且次級!否定inital否定的結果。這基本上將右側的任何內容都轉換爲布爾值(true或false)。

!false // true 
!!false // false 

因此,如果定義該方法則function這是truthy,將被類型強制轉換成true

document.createElement('video').canPlayType 

所以上面的函數返回。我們不需要一個函數,我們需要一個明確的布爾值,所以我們兩次否定它,並且因爲function不是虛假的(0,null,false,空字符串,NaN),所以它支持此方法的瀏覽器返回true。

!!document.createElement('video').canPlayType // true 

如果該方法不受支持,瀏覽器將返回undefined!undefined是真實的,!true是假的,所以!!document.createElement('video').LOL將返回false

9

雙感嘆號是一個JavaScript招返回true /輸入虛假不管。在你的例子中,如果瀏覽器不支持視頻標籤,它將返回undefined。 !未定義是真的。所以!! undefined是錯誤的。如果瀏覽器支持視頻,它將返回true。 !!真實也是如此。這使您不必處理未定義的情況。