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);
}
...全文
424 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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")。

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧