無法完全理解此原因。在以下代碼中,項目的localStorage
會提示爲undefined,但如果我使用if(x==undefined)
語法,則不起作用。有人可以解釋什麼是問題。謝謝。localStorage警報未定義,但是如果undefined爲false
alert(localStorage["x"]);
if(localStorage["x"]=="undefined"){alert("y");}
頂行提醒不確定
的底線,我不提醒ÿ。
無法完全理解此原因。在以下代碼中,項目的localStorage
會提示爲undefined,但如果我使用if(x==undefined)
語法,則不起作用。有人可以解釋什麼是問題。謝謝。localStorage警報未定義,但是如果undefined爲false
alert(localStorage["x"]);
if(localStorage["x"]=="undefined"){alert("y");}
頂行提醒不確定
的底線,我不提醒ÿ。
它不包含字符串"undefined"
,它包含了類型undefined
值:
if (localStorage["x"] == undefined) { alert("y"); }
值undefined
有可能在舊的瀏覽器來改變,所以好的做法是檢查,而不是類型:
if (typeof localStorage["x"] == 'undefined') { alert("y"); }
你是如此的正確。謝謝您的幫助。 –
爲什麼downvote?如果你不解釋你認爲是錯誤的,它不能改善答案。 – Guffa
我用過這個,但是當我在瀏覽器上按下刷新時,它會從我想要定義的文本開始。如果我清除本地存儲,它會返回到我想要的消息,然後再次按刷新後未定義。 – daddycardona
嘗試:
if(typeof(localStorage["x"]) == 'undefined'){alert("y");}
OR
if(localStorage["x"] == undefined){alert("y");}
OR
if(!localStorage["x"]){alert("y");}
檢查的東西是undefined
的兩種方式是:
typeof foo === "undefined"
和
foo === undefined
在第一種情況下,它將是true
如果foo
從未定義或foo
的值是undefined
。
在第二種情況下,也只會是true
如果foo
被定義(否則它會打破)和其值爲undefined
。
檢查其對字符串"undefined"
的值是不一樣的!
UPDATE:
當我說,如果你嘗試在一個沒有被定義對象文本的屬性進行操作,我想我的意思是,如果它是不確定的一切,我的意思是什麼更多類似這樣:
obj["x"].toLowerCase()
// or
obj["x"]["y"]
您試圖訪問/操作本來是undefined
的東西。在這種情況下,簡單地在if
語句中進行比較應該沒問題,因爲對象字面值報告值的方式......但與正常的Javascript變量非常不同。
使用對象常量,如果一個密鑰(說的「x」)沒有被定義,則
obj["x"]
返回undefined
的值,所以無論是typeof
和基本=== undefined
檢查將工作,並是true
。
未定義或具有undefined
值的整體差異與正常變量不同。
如果您有:
var a;
// or
var a = undefined;
那麼typeof
和基本=== undefined
會檢查我以前提供會工作,並true
。但是,如果你從未聲明a
,那麼只有typeof
檢查可以工作,並且可以是true
。 === undefined
檢查會中斷。
如果您在控制檯中看到,它說b is not defined
,並打破了if
聲明。
由於您基本上在查看與localStorage
的對象字面值,區分項目是未定義的還是值爲undefined
的方法是首先使用in
。所以,你可以使用:
if (!("x" in localStorage)) {
檢查,如果「x」是不是一個定義的屬性都和:
else if (localStorage["x"] === undefined) {
來,然後檢查是否已定義,但有undefined
值。然後,使用:
else {
表明可能localStorage["x"]
既定義的,並不具有價值undefined
。
在您的代碼中,由於對象文字報告屬性未定義的方式,因此可以使用typeof
或in
檢查(基於您想知道的內容)。使用基本的=== undefined
也是可以的,但如Guffa指出,可能會覆蓋undefined
的實際值,然後在此比較中不起作用。當涉及到正常的Javascript變量時,typeof
和=== undefined
檢查是不一樣的。
非常詳細的答案。非常感謝! –
對不起,您在這裏有一個錯誤:*「在第二種情況下,只有當foo被定義(否則它會中斷)它的值纔會成立,並且它的值是未定義的。」*這是不正確的。讀取未定義的屬性將返回值undefined。演示:http://jsfiddle.net/Guffa/9usJJ/ – Guffa
@Guffa感謝您指出。我不知道我在想什麼。我想我非常關注如何將正常變量報告爲「未定義」,以致於我忘記了這些對象文字是如何處理的......雖然只要你這麼說,那是一個「哦,我怎麼可能忘記」時刻。真正的問題是比較字符串「undefined」。我更新了我的答案,希望能夠首先展示我的內容,並且更準確 – Ian
[Duplicate?](http://stackoverflow.com/questions/4706347/javascript-comparing-2-checks-for-localstorage)。使用'if(typeof window.localStorage ['x']!='undefined')' – elclanrs
''undefined'!== undefined' –