2014-01-30 80 views
0

我很迷惑javascript操作員。看看這個:不是操作員不在我的JavaScript代碼上工作

localStorage.setItem('isValidUserCpf', false); 


    alert(localStorage.getItem('isValidUserCpf')); 
    alert(!localStorage.getItem('isValidUserCpf')); 
    alert(!(localStorage.getItem('isValidUserCpf'))); 

    if (localStorage.getItem('isValidUserCpf') == false){ 
     alert('notEntering'); 
    } 

爲什麼所有的警報打印「假」?爲什麼我的條件不起作用?我真的不知道我的問題是什麼。

謝謝。

回答

2

您只能在本地存儲中存儲字符串,所以當你試圖存儲false它轉換爲字符串"false"
您的第一個提醒顯示此字符串。其他人顯示此字符串應用於非運算符(!"false" === false),並將錯誤值轉換爲字符串並顯示在警報中。

你可以做的是序列化你的數據

localStorage.setItem('isValidUserCpf', JSON.strinify(false)); 
var isValidUserCpf = localStorage.getItem('isValidUserCpf'); 
alert(isValidUserCpf); 
alert(JSON.parse(isValidUserCpf)); 
alert(!JSON.parse(isValidUserCpf)); 

if (isValidUserCpf == false){ 
    alert('notEntering'); 
} 

https://developer.mozilla.org/en/docs/JSON

+0

感謝您的幫助和建議! – Caaarlos

1
localStorage.setItem('isValidUserCpf', false); 

false存儲爲字符串。

alert(localStorage.getItem('isValidUserCpf')); 

警報以字符串值"false"

alert(!localStorage.getItem('isValidUserCpf')); 

警報與布爾!"false"這也是false在布爾

alert(!(localStorage.getItem('isValidUserCpf'))); 

與上述相同的一個


localStorage.setItem('isValidUserCpf', true); 

,你會看到「真」,錯誤的測試,假

我不知道你要測試的環境中,你可以看到localStorage值與console.log(localStorage)

+0

得益於其存儲在localStorage的幫助我,現在我的代碼工作。但我不明白這句話:alert(!localStorage.getItem('isValidUserCpf')); 布爾型警報!「false」在布爾值中也是錯誤的。你可以給我解釋一下嗎? – Caaarlos

+0

如果你測試'if(「whatever」)',條件將會導致'true'。如果您測試'if(「false」)',則條件也會導致'true'。 ---另一方面,「if(!」whatever「)'將導致」false「。注意if(「」)' - 空字符串 - 結果爲'false'。 –

+0

謝謝@Tun Zarni Kyaw,現在我明白真正發生了什麼! – Caaarlos

1

本地存儲的鍵和值是由standard定義的字符串。評估爲布爾值時,非空字符串爲true,因此否定結果將導致false結果。類似地,字符串「false」與布爾值false不同。如果更改比較字符串的情況,因爲你希望它會評估 - 工作小提琴在http://jsfiddle.net/79pF5/

if (localStorage.getItem('isValidUserCpf') === 'false') { 
    alert('notEntering'); 
} 
+0

感謝您的幫助。其作品! – Caaarlos