如下js代码,为什么两个alert出来的都是false呢?
//是否是草稿
var is_draft ='<%=save%>';
alert (is_draft)
alert(!is_draft)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
//是否是草稿
var is_draft ='<%=save%>';
alert (is_draft)
alert(!is_draft)
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
第一次是字符串类型,第二次是布尔类型咯。
其实你可以换另一种写法
运行环境是什么?无法复现你的都是false的alert。
仔细检查,清空浏览器缓存。重新运行一下。
同意linong的说法,如果这里
is_draft ='<%=save%>';
被实体替换后,is_draft
的值类型是string
,但值可能是false
,所以第一个alert输出是false
,第二个alert输出时先对String转换判断不为空字符,所以为真,再取反为false
,所以输出还是为false
。这种问题是bug产生的常见原因之一。
要根据
<%=save%>
可能的值范围实现更安全的代码,比如这里如果是is_draft =<%=save%> ;
则可能更安全,因为<%=save%>
本身就存储的是布尔值的。正常情况是第一个alert弹出
<%=save%>
第二个alert弹出 false