2013-04-22 19 views
0

我已經注意到,如果你有一個聲明,如下:在javascript中是否將空字符串視爲falsy?

var test = "" || null 

test將評估爲null但如果我們這樣做了以下內容:

var test = "test" || null 

test將評估「測試「,對於任何對象來說,同樣適用於替換字符串,所以JavaScript會將空字符串視爲虛假值還是空值,以及爲什麼?不是一個空字符串仍然是一個對象,所以不應該處理相同?

我已經在FireFox,Chrome,IE7/8/9和Node中測試過了。

+2

http://www.sitepoint.com/javascript-truthy-falsy/ – Rikonator 2013-04-22 09:54:28

回答

3

JavaScript是否將空字符串視爲falsy或null值,如果是這樣,爲什麼?

是的,因爲the spec says so (§9.2)

是不是一個空字符串仍然對象

號的原始字符串值沒有對象,只有new String("")將是(和將truthy)

+0

啊現在更有意義了,謝謝!它似乎對我來說是一個奇怪的決定,使空字符串麻煩,但我想我必須習慣於將字符串視爲基本類型,而不是對象。 – AgentRegEdit 2013-04-22 11:31:39

0

字符串不是一個對象,它是一個像數字或布爾型的原語。

空字符串NaN,+0,-0,false,undefined和null是在直接布爾轉換中計算爲false的唯一值。

0

字符串ISN」 JS中的一個對象。其他「虛假」值爲:0,NaN,nullundefined

0

您必須注意的錯誤值的一個危險問題是在檢查某個屬性的存在時。

假設您想測試新屬性的可用性;當這個屬性其實可以有0或「」的值,你不能簡單地用

if (!someObject.someProperty) 
    /* incorrectly assume that someProperty is unavailable */ 
In this case, you must check for it being really present or not: 

if (typeof someObject.someProperty == "undefined") 
    /* now it's really not available */ 

SEE HERE

0

是檢查其可用性空字符串是falsy,但是new String("")不是。

還請注意,這是很可能的,

if (x) { ... } 

驗證,但

if (x == false) { ... } 

過驗證(發生這種情況,例如有一個空數組[]new String(""))。

相關問題