2012-10-19 31 views
-4

如果某個值必須定義爲真或假,根據關檢查了另一個值,還有做任何陷阱:真的還是假的,如果變量定義陷阱

!!someValue 

只是針對Chrome瀏覽器的引擎一個快速運行得出:

boolCheck=function(someValue){ 
    return !! someValue; 
} 

console.log(boolCheck());   //false 
console.log(boolCheck(undefined)); //false 
console.log(boolCheck(null));  //false 
console.log(boolCheck(1));   //true 
console.log(boolCheck({va:1}));  //true 
console.log(boolCheck("someTS")); //true 
console.log(boolCheck(boolCheck)); //true  

這似乎工作....

+0

你在這裏問什麼?什麼是真實的,什麼是錯誤的布爾上下文是明確的。不知道你正在尋找什麼「陷阱」。 –

+0

你究竟意味着什麼?我們爲什麼要尋找那些毫無意義的事情呢? – djechlin

+0

另請參閱:http://stackoverflow.com/questions/784929/what-is-the-not-not-operator-in-javascript – georg

回答

6

!操作者總是返回任一truefalse,的x所以假設評估正常完成,!!x是一個布爾值,該值是Boolean(x)等效其中Boolean是EcmaScript的內置函數。

http://es5.github.com/#x11.4.9

11.4.9邏輯非運算符(!

生產UnaryExpression!UnaryExpression評估如下:

  1. 讓EXPR是評估UnaryExpression的結果。
  2. 讓oldValue爲ToBoolean(GetValue(expr))。
  3. 如果oldValue爲true,則返回false
  4. 返回true

http://es5.github.com/#x9.2解釋ToBoolean如何工作

9.2 ToBoolean

的抽象操作ToBoolean根據表11其參數轉換爲布爾類型的數值:

表11 - ToBoolean轉換

Argument Type Result 
Undefined  false 
Null    false 
Boolean   The result equals the input argument (no conversion). 
Number   The result is false if the argument is +0, −0, or NaN; otherwise the result is true. 
String   The result is false if the argument is the empty String (its length is zero); otherwise the result is true. 
Object   true 

上表說明了大部分的例子,但爲什麼

console.log(boolCheck()); 

false它可能不是很明顯。當您調用實參比正式參數少的函數時,額外參數的值爲undefined,如上表所示!!undefinedfalse


有沒有做任何陷阱:!!someValue

的意圖是不是Boolean(someValue)不太清楚,但它會跨平臺工作始終,最有經驗的JavaScript開發者會承認它。

0

JavaScript是不是強類型的,所以如果你不一些值會產生d不同的結果取決於傳入的類型。所以是的,有很多陷阱!

0

這基本上意味着如果它是0,null,undefined或false,那麼評估爲false,其他評估爲true。

其中,順便說一句,如果在自動被轉換爲布爾值的情況下使用,與僅評估變量本身完全相同。 「if(someValue){}」將與「if(!! someValue){}」相同,因爲if語句會自動將內容評估爲布爾值,並且!只是在做同樣的事情(在那種情況下是冗餘的)。但顯而易見的事實是,當你使用任何類型的布爾值時,99.9999%的時間最終將以這種方式進行評估,這就是爲什麼!代碼中除了冗餘之外確實沒有多少代碼。

但是,最後,您對「疑難解答」的定義太模糊,無法在此處理解。如果「null」評估爲「false」會破壞您的預期用途,我沒有任何想法。