作用:!! 將后面的表達式強制轉換為布爾類型的數據(boolean),也就是只能是true或者false;
布爾型的轉換,javascript約定規則為:
結果是 false 的情況:
false、0、undefinded、null、” ”(空字符串) 為 false
結果是 true 的情況:
true、1、”非空字符串”、任意數組,對象,函數(函數是特殊的對象)即使是空數組,空對象 為 true
特別注意:
字符串”0″轉化成bool 為true ,數值0 轉化為bool 為false
!與 !!
解釋:一個!號表示 非 ,兩個 !!號表示 非非,!!基本就只應用於將類型轉換為布爾值。
舉個例子:
var a;
console.log(a); //undefined
console.log(!a); //true
console.log(!!a); //false
以上代碼定義了一個變量a 並沒有賦值,所以結果是 undefined ,但是使用 !將undefined轉換成了bool,但是undefined本身應該是false,結果是相反的,所以再加一個!使得結果轉換成正確的bool值,
即 !!a 表示把a轉換成bool值:a--> undefined-->false
所以 !!(雙感嘆號)的作用就是將后面的表達式強制轉換為布爾類型的數據(boolean)
小結:
對null與undefined等其他用隱式轉換的值,用一個感嘆號返回的都是true,用兩個感嘆號返回的就是false,所以兩個感嘆號的作用就在於,將這些值轉換為“等價”的布爾值,如果明確設置了變量的值(非null/undifined/0/”“等值),結果就會根據變量的實際值來返回,如果沒有設置,結果就會返回false。
