Javascript eval是否正确评估包含空变量(即未知变量)的三态布尔逻辑?
我知道Javascript的eval可以计算如下表达式Javascript eval是否正确评估包含空变量(即未知变量)的三态布尔逻辑?,javascript,eval,Javascript,Eval,我知道Javascript的eval可以计算如下表达式 (true) && (false) (true) || (false) etc. 然而,eval规范是否包括涉及未知项的评估语句,如 (true) && (null) (true) || (null) (null) && (null) (null) || (null) etc. 我在代码中尝试过这一点,并看到它确实做到了,但这是预期的行为吗?Javascript eval规范会这样说
(true) && (false)
(true) || (false)
etc.
然而,eval规范是否包括涉及未知项的评估语句,如
(true) && (null)
(true) || (null)
(null) && (null)
(null) || (null)
etc.
我在代码中尝试过这一点,并看到它确实做到了,但这是预期的行为吗?Javascript eval规范会这样说吗?null的计算结果为false,但请记住,还有更多涉及null的细节(例如:使用===) 请查看这一页。它更详细地介绍了这一点:
null
不是“未知”的,在比较中作为操作数放置时,它只是强制为布尔值(false
)。有关更多信息,请参阅本文档中的null
行
我不相信对eval
的行为有任何“规范”-它所做的一切都是使用javascript的字符串表示,并在当前上下文中作为javascript执行。没有理由
eval('(true) && (null)');
会给你不同的结果
(true) && (null)
也
Javascript eval是否正确计算三态布尔逻辑
定义“正确”。Javascript定义了行为null
的行为类似于布尔表达式中的false
(是falsy)
0
、NaN
、”
、null
、未定义的
(当然还有false
)都是错误的。对象、非空字符串和非零数字(当然还有true
)都是真实的
&&
返回第一个falsy参数(如果有)或最后一个参数(lazy和),不计算其余参数null&“任何东西”
都是null
。这可以在诸如console&&console.log&&console.log()
之类的语句中使用
|
返回第一个truthy参数(如果有)或最后一个参数(lazy或),不计算其余参数null | |“某物”
是“某物”
。这可以在诸如var xhr=XmlHttpRequest | | itsReplacementInoderBrowser
!null
计算结果为true
if(null).
计算else
分支。这同样适用于任何虚假的东西
从技术上讲,未定义的变量是
undefined
,而不是null
。不过,两者都是假的。null
在Javascript中是假的,而不是“null”。哦,你需要提醒一下eval是邪恶的吗?@JanDvorak我正在使用eval生成测试数据。这没什么不好的。与null相比,您指的是哪些注意事项?我想你在想楠。Null的计算结果与该列表中除NaN之外的所有其他项一样。@DennisPlucinik:也许“警告”是个不好的术语。我指的是应该使用===的情况。我将重新表述答案。==无论如何都应该使用。==在任何情况下都比它容易混淆和出错更有用。完全不相关。eval
在当前范围内执行,而不是在全局范围内执行。这个答案听起来好像不是这样的。请注意,规范中的上下文指的是这个
对象。@JanDvorak好的,我想的是设置超时
,我将进行编辑。谢谢