2014-02-22 30 views
6

有是一個和Javascript在C採用了在那裏你可以進行邏輯檢查,沒有檢查什麼語法:JavaScript中無表達式語句的完整形式是什麼?

if (foo) { 
} 

這是什麼相當於?它是:

if (foo != null) { } 
if (foo !== null) { } 
if (typeof(foo) != 'undefined') { } 
if (typeof(foo) !== 'undefined') { } 
if (typeof(foo) != 'object') { } 
if (typeof(foo) !== 'Object') { } 

我詢問是想以確保成員「存在」的實際動機(也就是說,如果是nullundefined那麼它不存在):

if (window.devicePixelRatio !== null) 
if (window.devicePixelRatio != null) 
if (!(window.devicePixelRatio == null)) 
if (!(window.devicePixelRatio === null)) 
if (!(window.devicePixelRatio == undefined)) 
if (!(window.devicePixelRatio === undefined)) 
if ((window.devicePixelRatio !== undefined)) 

我擔心的是如果成員是定義爲,但定義爲null,在這種情況下(就我而言)它沒有被分配。

我知道無表達式語法返回true「truthy」值。作爲實際值,我對「truthy」值的興趣不大。

+0

請注意,如果foo定義並等於'0',它也會返回false。 – Cristy

+0

@Cristy在這種情況下,它是一個有效值:) –

+0

@IanBoyd,它是有效的,但'if'沒有執行。 'var foo = 0;如果(foo)console.log(1)'不輸出任何內容,那麼它與任何這些都不相等。 – Cristy

回答

5
if (foo) { 
} 

「這是什麼等同於?」

它不等同於任何你建議的人的。這將相當於:

if (Boolean(foo)) { } 

或同樣的事情通過!操作:

if (!!foo) { } 

或者你可以在你的比較是明確的,如果你真的想要。

if (!!foo === true) { } 

「我詢問實際的動機是想以確保成員‘存在’...」

找到,如果一個成員在一個對象存在,使用in運算符。

if ("devicePixelRatio" in window) { } 

「......(這就是說,如果是null或undefined,則它不存在):」

要檢查不nullundefined,這是不一樣的,不這樣做,這樣做:

if (window.devicePixelRatio != null) { } 

!=運營商將同時執行nullundefined檢查。任何其他值都將符合條件。

+0

我們剛剛被告知不應該使用['!='](http://www.jshint.com/)。 *嘆息* –

+0

@IanBoyd:是的,就像任何功能一樣,人們應該理解它是如何工作的,並在適當的時候使用它。 '=='和'!='的語義可能有點混亂,但這是一個非常簡單和有用的特殊情況。除了'null'和'undefined'之外,沒有什麼是'== null'或'== undefined'。您可以配置jsHint關閉該警告。 –

相關問題