最近在在看Javascript代碼時,會經常看到代碼中使用雙感歎的用法,如
var a = !!result.flag;
開始的時候,不怎麼明白為什麼一定要這麼做?後來想想,應該是在下文中要對a進行判斷。那麼,有人可能會問,即使用不用又感歎号,也能正常的判斷啊。的确如此,但我想,經過雙感歎号之後,a的值就變成了一個boolean值了,這樣會讓判斷語句看上去更直覺吧。
因為大家都知道,js是一個弱類型語言,在JS中使用如下語句判斷時:
if(!a) {
alert("a ia not true");
}
當a的值為null/undefined/0/NaN/""(空字元串)時,上面的if條件都是成立的,進而都會彈出“a ia not true”;但是從語義來上看的話,可能并不能麼好了解。明明a是null或者undefined,可為什麼彈出的消息卻是“a ia not true”。為了避免這種了解上的差異,就可以使用雙感歎号了。
也就是說,雙感歎号其實是簡單的,沒什麼玄乎的,下面的代碼可以說明這一點:
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<script>
var a = {a:112};
var b = a.b;
var c = !a.b;
var d = !!a.b;
var e = a.a;
var f = !a.a;
var g = !!a.a;
</script>
</head>
<body>
</body>
</html>
debug截圖(注意看右邊的 watch expressions哦):