我真的不知道它是如何可能的,我不能在簡化的環境中重現錯誤,JSFiddle說。但這是它在我的應用程序中的外觀。神祕的JavaScript行爲:不等於
我試圖將值爲'True','False'或'其他'的字符串轉換爲布爾值,如果它是True或False。在大多數情況下,它工作得很好(儘管它們可能是在做轉換的巧妙方式),因爲它顯示在下面的圖片
但是有時它失敗,手錶的價值顯示爲遵循:
所以突然的「真」值字符串變量不等於「真」字符串文字。我迷路了。這怎麼可能?我在這裏錯過了什麼?
在此先感謝
我真的不知道它是如何可能的,我不能在簡化的環境中重現錯誤,JSFiddle說。但這是它在我的應用程序中的外觀。神祕的JavaScript行爲:不等於
我試圖將值爲'True','False'或'其他'的字符串轉換爲布爾值,如果它是True或False。在大多數情況下,它工作得很好(儘管它們可能是在做轉換的巧妙方式),因爲它顯示在下面的圖片
但是有時它失敗,手錶的價值顯示爲遵循:
所以突然的「真」值字符串變量不等於「真」字符串文字。我迷路了。這怎麼可能?我在這裏錯過了什麼?
在此先感謝
也許你的字符串包含你的調試工具不顯示的字符。下面是谷歌Chrome瀏覽器的控制檯一個例子:
> var a = "foo";
> var b = "foo\r";
> a
"foo"
> b
"foo"
> a === b
false
這實在是很難說這是怎麼回事,你的情況,但你可以用「神奇」的字符串的.length
和.charAt(i)
性質的工作,找出發生了什麼事情。
只是爲了理智,測試=== "True"
,使用雙引號,而不是單一的。它不應該的問題,但只是排除:)
在發佈之前做了這些,但覺得真的很傻,以爲我瘋了,現在是時候在這裏提問了。如預期的那樣,結果顯然是出乎意料和錯誤的。但至少一致。 – michal 2012-02-12 21:27:14
@Joe邏輯是正確的,他會有一個布爾值true或false或作爲字符串的值 – zatatatata 2012-02-12 21:35:04
重新閱讀,你是對的:)刪除該評論。 – Joe 2012-02-12 21:36:14
是的,剛接觸它並且試圖發佈一個答案(這是我在8小時內不能做的事它出現) 好吧,知道了!將您的問題發佈到stackoverflow是有幫助的。 我沒有檢查'value.length',並且稍微感到驚訝,看到'5' 它是從服務器反序列化數據後剩下的'\ 0'。 – michal 2012-02-12 21:43:09
一個簡單的'console.log(value.split(「」));'可能有助於解決正在發生的事情。 – 2012-02-12 21:45:56
空終止的字符串。 yay – 2012-02-12 21:46:45