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

//是否是草稿
        var is_draft ='<%=save%>';
        alert (is_draft)
        alert(!is_draft)
阅读 2.4k
4 个回答

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

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

image.png


其实你可以换另一种写法

is_draft = !![<%=save%>][0]
console.log (is_draft)

运行环境是什么?无法复现你的都是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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题