如下js代码,为什么两个alert出来的都是false呢?

发布于 2022-09-12 13:27:14 字数 122 浏览 19 评论 0

//是否是草稿
        var is_draft ='<%=save%>';
        alert (is_draft)
        alert(!is_draft)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

圈圈圆圆圈圈 2022-09-19 13:27:14

第一次是字符串类型,第二次是布尔类型咯。

is_draft ='false';
console.log (is_draft)
console.log(!is_draft)

image.png


其实你可以换另一种写法

is_draft = !![<%=save%>][0]
console.log (is_draft)
雪花飘飘的天空 2022-09-19 13:27:14

运行环境是什么?无法复现你的都是false的alert。
仔细检查,清空浏览器缓存。重新运行一下。

放肆 2022-09-19 13:27:14

同意linong的说法,如果这里is_draft ='<%=save%>';被实体替换后,is_draft的值类型是string,但值可能是false,所以第一个alert输出是false,第二个alert输出时先对String转换判断不为空字符,所以为真,再取反为false,所以输出还是为false

这种问题是bug产生的常见原因之一。
要根据<%=save%>可能的值范围实现更安全的代码,比如这里如果是
is_draft =<%=save%> ;则可能更安全,因为<%=save%>本身就存储的是布尔值的。

梦幻的味道 2022-09-19 13:27:14

正常情况是第一个alert弹出
<%=save%>
第二个alert弹出 false

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文