localStorage警告未定义,但如果undefined为false

时间:2012-12-20 01:23:32

标签: javascript local-storage

不能完全理解这个的原因。在以下代码中,项目的localStorage会被警告为未定义,但如果我使用if(x==undefined)语法则不起作用。有人可以解释是什么问题。谢谢。

alert(localStorage["x"]);

if(localStorage["x"]=="undefined"){alert("y");}

第一行提醒未定义

底线不会警告 y

3 个答案:

答案 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检查会中断。

看看:http://jsfiddle.net/7npJx/

如果您在控制台中注意到它显示b is not defined并打破if声明。

由于您基本上使用localStorage查看对象字面值,因此区分项目是否未定义或值为undefined的方法是首先使用in。所以,你可以使用:

if (!("x" in localStorage)) {

检查“x”是否完全不是已定义的属性,并且:

else if (localStorage["x"] === undefined) {

然后检查它是否已定义但值为undefined。然后,使用:

else {

表示localStorage["x"]已定义,且没有undefined值。

在您的代码中,由于对象文字报告未定义的属性的方式,可以使用typeofin检查(基于您想知道的内容)。使用基本=== undefined也没关系,但正如 Guffa 所指出的那样,undefined的实际值可能会被覆盖,然后在此比较中无效。对于普通的Javascript变量,typeof=== undefined检查不一样。