undefined的奇怪问题

圣殿骑士18 2017-09-28 06:01:37
我使用H5本地存储的时候,如下代码中,第一次调用 localStorage.HostName的时候,其值是undefined,所以照理说,
当值是undefined时,!!localStorage.HostName的值应该是false,所以第一个if语句应该不会执行语句内的代码。
结果,却发现还是会执行,并执行了alert,显示出了undefined。
而我后续加的测试代码,alert(33333)却没有执行(这符合我的预期),想不通这是怎么回事?


if (!!localStorage.HostName) {
alert(localStorage.HostName);
$("#bHostName").val(localStorage.HostName);
}

if (!!undefined) {
alert(333333);
}
...全文
310 点赞 收藏 6
写回复
6 条回复
圣殿骑士18 2017年09月30日
引用 4 楼 qq_29594393 的回复:
不用二次取反,js 会自动帮你做类型转换,一看就知道强迫症还没改过来 ,一定要二次取反,结果是不会错的 if (localStorage.HostName) { alert(localStorage.HostName); $("#bHostName").val(localStorage.HostName); }
哈哈,还真不是强迫症,我是因为测试时保证不出意外,所以加上的。平时不太用!!
回复 点赞
圣殿骑士18 2017年09月30日
引用 1 楼 u013785316 的回复:
因为localStorage把你的undefined转换成了"undefined"这个字符串存储,即使你这样存储:localStorage.HostName=undefined; 你可以用typeof localStorage.HostName 出来看下是一个 string类型,所以 if(!!"undefined")是true,所以能alert("undefined")。
后来我发现了,确实是这个问题,是由于之前的代码不严谨导致undefined存入了,再取出来的时候,是字符串的undefined,所以导致判断问题。
回复 点赞
当作看不见 2017年09月29日
不用二次取反,js 会自动帮你做类型转换,一看就知道强迫症还没改过来 ,一定要二次取反,结果是不会错的 if (localStorage.HostName) { alert(localStorage.HostName); $("#bHostName").val(localStorage.HostName); }
回复 点赞
当作看不见 2017年09月29日
引用 2 楼 xuehengyang 的回复:
测试一下
我擦,河蟹大大 居然来这里了
回复 点赞
tong-wl 2017年09月29日
因为localStorage把你的undefined转换成了"undefined"这个字符串存储,即使你这样存储:localStorage.HostName=undefined; 你可以用typeof localStorage.HostName 出来看下是一个 string类型,所以 if(!!"undefined")是true,所以能alert("undefined")。
回复 点赞
发动态
发帖子
JavaScript
创建于2007-09-28

5.1w+

社区成员

22.3w+

社区内容

Web 开发 JavaScript
社区公告
暂无公告