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);
}
...全文
405 6 打赏 收藏 转发到动态 举报
写回复
用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")。
该版本是1.6主线上的最新版本,主要修复了大量的BUG。包括: BUG修复列表: Ajax #9255:修复webkit内核浏览器中jQuery.parseXML不能处理异常的问题。 #9854:Pass statusText through instead of “normalizing” it #9887:修复jQuery.ajaxSetup可能导致内存浪费的问题。 #9970:Typo in ajax.js:status should be jqXHR.status #10098:Encode comment-like Accept headers to avoid mobile carrier mangling Attributes #9630:修复foo.contents().hasClass()返回错误值的问题。 #9699:修复webkit内核浏览器中removeAttr('tyle')不能准确移除style属性的问题。 #9719:修复IE6中removeAttr('disabled')不能改变输入框颜色的问题。 #9979:修复.prop(‘tabIndex’) 可能返回错误结果的问题。 #9980:为IE6/7简化attr代码。 Build #9988:修改jQuery compressed版本的License Header,使其尽可能小。 Core #9521:XSS with $(location.hash) and $(#) is needed? #9897:try-catch isPlainObject detection #10076:$.inArray crashes IE6 and Chrome if second argument is `null` or `undefined` CSS #6652:Remove filter:alpha(opacity=100) after animation #9572:Support -ms-transform in .css() method #10021:Can’t add negative numbers using the relative-value syntax with .css() and .animate() Data #8235:修复jQuery.data在某些情况下抛出脚本错误的问题。 #9318:修复HTML5数据的属性名中若包含数字将引发奇怪行为的问题。 #9413:$.fn.removeData does not remove data with a dash in a name #9779:Allow non-null|undefined evaluation of data property values #9794:jQuery.fn.data() correctly handle access to arbitrary data property values #10016:Cannot retrieve “false-y” values under key names with dashes using jQuery.data method #10080:unload from frame’s window breaks in IE8 Dimensions #10123:修复Firefox 6中.width() 可能返回一个浮点值的问题。 Event #7071:Accessing the ‘type’ property on VML elements fails on IE during submit special handler Manipulation #9587:Cloning a div with an object causes error in IE8

87,907

社区成员

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

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