2012-02-12 60 views
5

我真的不知道它是如何可能的,我不能在簡化的環境中重現錯誤,JSFiddle說。但這是它在我的應用程序中的外觀。神祕的JavaScript行爲:不等於

我試圖將值爲'True','False'或'其他'的字符串轉換爲布爾值,如果它是True或False。在大多數情況下,它工作得很好(儘管它們可能是在做轉換的巧妙方式),因爲它顯示在下面的圖片

enter image description here

但是有時它失敗,手錶的價值顯示爲遵循:

enter image description here

所以突然的「真」值字符串變量不等於「真」字符串文字。我迷路了。這怎麼可能?我在這裏錯過了什麼?

在此先感謝

回答

4

也許你的字符串包含你的調試工具不顯示的字符。下面是谷歌Chrome瀏覽器的控制檯一個例子:

> var a = "foo"; 
> var b = "foo\r"; 
> a 
"foo" 
> b 
"foo" 
> a === b 
false 

這實在是很難說這是怎麼回事,你的情況,但你可以用「神奇」的字符串的.length.charAt(i)性質的工作,找出發生了什麼事情。

+2

是的,剛接觸它並且試圖發佈一個答案(這是我在8小時內不能做的事它出現) 好吧,知道了!將您的問題發佈到stackoverflow是有幫助的。 我沒有檢查'value.length',並且稍微感到驚訝,看到'5' 它是從服務器反序列化數據後剩下的'\ 0'。 – michal 2012-02-12 21:43:09

+0

一個簡單的'console.log(value.split(「」));'可能有助於解決正在發生的事情。 – 2012-02-12 21:45:56

+0

空終止的字符串。 yay – 2012-02-12 21:46:45

0

只是爲了理智,測試=== "True",使用雙引號,而不是單一的。它不應該的問題,但只是排除:)

+0

在發佈之前做了這些,但覺得真的很傻,以爲我瘋了,現在是時候在這裏提問了。如預期的那樣,結果顯然是出乎意料和錯誤的。但至少一致。 – michal 2012-02-12 21:27:14

+0

@Joe邏輯是正確的,他會有一個布爾值true或false或作爲字符串的值 – zatatatata 2012-02-12 21:35:04

+0

重新閱讀,你是對的:)刪除該評論。 – Joe 2012-02-12 21:36:14