不能完全理解这个的原因。在以下代码中,项目的localStorage
会被警告为未定义,但如果我使用if(x==undefined)
语法则不起作用。有人可以解释是什么问题。谢谢。
alert(localStorage["x"]);
if(localStorage["x"]=="undefined"){alert("y");}
第一行提醒未定义
底线不会警告 y 。
答案 0 :(得分:5)
它不包含字符串"undefined"
,它包含undefined
类型的值:
if (localStorage["x"] == undefined) { alert("y"); }
值undefined
可以在旧浏览器中更改,因此最好的做法是检查类型:
if (typeof localStorage["x"] == 'undefined') { alert("y"); }
答案 1 :(得分:1)
尝试:
if(typeof( localStorage["x"]) == 'undefined'){alert("y");}
OR
if( localStorage["x"] == undefined){alert("y");}
OR
if( !localStorage["x"] ){alert("y");}
答案 2 :(得分:1)
检查undefined
内容的两种方法是:
typeof foo === "undefined"
和
foo === undefined
在第一种情况下,如果true
从未定义或 foo
的值为foo
,则为undefined
。
在第二种情况下,只有true
如果定义foo
(否则它会中断)和其值为undefined
。< / p>
根据字符串"undefined"
检查其值并不完全相同!
<强>更新强>
当我说如果你试图对未定义的对象文字的属性执行操作时,我想我的意思是,如果它根本未定义,我的意思是更像是这样:
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
检查不一样。