!!一般用來將後面的表達式強制轉換為布林類型的資料(boolean),也就是只能是true或false;
常常看到這樣的例子:
!!一般用來將後面的表達式強制轉換為布林類型的資料(boolean),也就是只能是true或false;
因為javascript是弱型別的語言(變數沒有固定的資料型別)所以有時需要強制轉換成對應的型別,類似的如:
a=parseInt(“1234″) a=”1234″-0 //转换为数字 b=1234+”” //转换为字符串 c=someObject.toString() //将对象转换为字符串
其中第1種、第4種為明確轉換,2、3為隱式轉換
布林型的轉換,javascript約定規則為
false、undefinded、null、0、”” 為 false
true、1、」somestring」、[Object] 為 true
對null與undefined等其他用隱式轉換的值,用!操作符時都會產生true的結果,所以用兩個感嘆號的作用就在於將這些值轉換為“等價”的布爾值;
再來看看:
var foo; alert(!foo);//undifined情况下,一个感叹号返回的是true; alert(!goo);//null情况下,一个感叹号返回的也是true; var o={flag:true}; var test=!!o.flag;//等效于var test=o.flag||false; alert(test);
這段例子,示範了在undifined和null時,用一個感嘆號返回的都是true,用兩個感嘆號返回的就是false,所以兩個感嘆號的作用就在於,如果明確設置了變量的值(非null/undifined/0/”“等值),結果就會根據變數的實際值來返回,如果沒有設置,結果就會返回false。