我正在研究underscore.js的src,發現這樣的:Javascript邏輯運算符:?
_.isRegExp = function(obj) {
return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
};
爲什麼 「!」用過的?它應該被看作是NOT-NOT還是有一些深奧的JS細微差別在這裏?
我正在研究underscore.js的src,發現這樣的:Javascript邏輯運算符:?
_.isRegExp = function(obj) {
return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
};
爲什麼 「!」用過的?它應該被看作是NOT-NOT還是有一些深奧的JS細微差別在這裏?
是的,這不是。它是一種常用的習慣用法,將一個值轉換爲具有相同真實性的布爾值。
JavaScript能夠理解0.0
,''
,null
,undefined
和false
作爲falsy,以及任何其他值(包括,很明顯,true
)作爲truthy。該成語將所有前者轉換爲布爾型false
,後者全部轉換爲布爾型true
。
在這種特殊情況下,
a && b
將返回b
如果兩個a
和b
是truthy;
!!(a && b)
將返回true
如果兩個a
和b
是truthy。
你忘了'NaN'(as falsey)。 – user113716
哦該死的,所以我做了... :) – Amadan
這只是兩個!運營商彼此相鄰。但雙重否定是毫無意義的,除非你正在使用!像運營商轉換爲布爾類型。
它會轉換任何東西真的還是假的......
的& &運營收益有誤或表達式中的最後一個值:
("a" && "b") == "b"
的||運算符返回第一個值,結果爲真
("a" || "b") == "a"
該!運算符返回一個布爾型
!"a" == false
所以,如果你想將一個變量轉換爲布爾值,你可以使用!
var myVar = "a"
!!myVar == true
myVar = undefined
!!myVar == false
等
這就是所謂的簡寫,而不是一個深奧的JS深奧微妙的細微差別JS笑 – dynamic
。與'+'運算符用於轉換爲一個數字(例如:'+「0」')相同的方式,並且使用'+「」'轉換爲一個字符串。 – HoLyVieR
可能重複[什麼是!!運營商在JavaScript?](http://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript) –