2012-12-28 128 views
-1

是否有下面的語句之間的任何差別:邏輯表達式

  1. 在許多腳本if(newValue && newValue != '')
  2. if(newValue != '')

我已經觀察到的表達1,但始終弄糊塗了。

請協助!

+2

第一個會拒​​絕所有其他不等於空虛的falsy值字符串。 –

回答

1

回答是否定的,

1)(newValue && newValue != ''),它會檢查是否NEWVALUE存在(非假值)和其不爲空

2)if(newValue != ''),它只檢查NEWVALUE是否不爲空

+0

非常感謝Milind,我明白了! – user1934643

+0

有沒有真正的價值等於空的字符串? –

+0

@ user1934643:很高興幫助你... –

3

if(newValue & & newValue!='')。

這防範值爲nullundefined

在對可能''0falseundefinednull,僅僅最後兩個不相等''(使用!=),需要額外的條件。

console.log(null && null != '') // null -> falsy 
console.log(null != '') // truthy 

var undef = void 0; 

console.log(undef && undef != '') // undefined -> falsy 
console.log(undef != '') // truthy 
+0

不只是'null' ... –

+0

@JanDvorak那還有什麼? –

+1

哇......我想'0!='''是真的 –

0

只有一個更薄我認爲值得添加到已發佈的答案。
當你的OP,說:你見過在現有代碼很多次,第一個表達式,所以你可能看到過這樣的事情:

if (foo && foo.bar) 
{ 
    foo.bar(); 
} 

在這種情況下,這是爲了避免出現錯誤某些瀏覽器。在大多數現代瀏覽器中,訪問類似localStorage.doesNotExist的瀏覽器不會引發錯誤,但並非所有瀏覽器都支持此操作,因此我們首先檢查localStorage對象是否存在,如果是,則可以將該屬性解析爲非僞造值。

同樣的邏輯也適用於對象的方法,可以在不同的瀏覽器有所不同:

var domElement = document.getElementById('foobar');//might not exist, though 
if (domElement && domElement.addEventListener) 
{//does element exist && does it have a method called addEventListener 
    domElement.addEventListener('click', functionRef, false); 
} 
else if (domElement && domElement.attachEvent) 
{ 
    domElement.attachEvent('onclick', functionRef); 
} 

如果你省略第一domElement if語句,以及簡單的寫domElement.addEventListener,即可能與編寫null.addEventListener相同,它會拋出一個TypeError(因爲您試圖訪問某個原始值的屬性)