是否有下面的語句之間的任何差別:邏輯表達式
- 在許多腳本
if(newValue && newValue != '')
和 if(newValue != '')
我已經觀察到的表達1,但始終弄糊塗了。
請協助!
是否有下面的語句之間的任何差別:邏輯表達式
if(newValue && newValue != '')
和if(newValue != '')
我已經觀察到的表達1,但始終弄糊塗了。
請協助!
回答是否定的,
1)(newValue && newValue != '')
,它會檢查是否NEWVALUE存在(非假值)和其不爲空
2)if(newValue != '')
,它只檢查NEWVALUE是否不爲空
if(newValue & & newValue!='')。
這防範值爲null
或undefined
。
在對可能''
,0
,false
,undefined
和null
,僅僅最後兩個不相等''
(使用!=
),需要額外的條件。
console.log(null && null != '') // null -> falsy
console.log(null != '') // truthy
var undef = void 0;
console.log(undef && undef != '') // undefined -> falsy
console.log(undef != '') // truthy
不只是'null' ... –
@JanDvorak那還有什麼? –
哇......我想'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(因爲您試圖訪問某個原始值的屬性)
第一個會拒絕所有其他不等於空虛的falsy值字符串。 –