-1

我知道 Javascript 的 eval 可以评估表达式,例如

(true) && (false)
(true) || (false) 
 etc.

但是,eval 的规范是否包括评估涉及未知数的语句,例如

(true) && (null)
(true) || (null)
(null) && (null)
(null) || (null)
 etc.

我已经在代码中尝试过这个并看到它做到了,但这是预期的行为吗?Javascript eval 规范是这样说的吗?

4

3 回答 3

1

Javascript eval 是否正确评估三态布尔逻辑?

定义“正确”。Javascript 定义了行为。Eval在 Javascript 中,将字符串评估为 javascript 代码。SQL 也定义了行为。两者的行为不同。

在 javascript 中,null行为类似于false布尔表达式(是假的)。

0, NaN, "", null, undefined(当然还有false)都是假的。对象、非空字符串和非零数字(当然还有true)都是真实的。

&&返回第一个虚假参数(如果有)或最后一个参数(惰性 AND),并且不计算其余参数。null && "anything"null。这可以用在像console && console.log && console.log().

||返回第一个真实参数(如果有)或最后一个参数(惰性或),并且不评估其余参数。null || "something""something"。这可以用在像这样的语句中var xhr = XmlHttpRequest || ItsReplacementInOlderBrowsers

!null评估为trueif(null) ...评估else分支。这同样适用于任何虚假的事物。

从技术上讲,未定义的变量是undefined,不是null。不过,两者都是虚假的。

于 2012-12-12T14:46:13.280 回答
0

null不是“未知的”,当作为操作数放在比较中时,它只是被强制转换为布尔值 ( false)。有关更多信息,请参阅null“真实表”中的行。

我不相信有任何行为的“规范” eval- 它所做的一切都采用 javascript 的字符串表示并在当前上下文中将其作为 javascript 执行。没有理由

eval('(true) && (null)');

会给你不同的结果

(true) && (null)

此外,eval 是邪恶的

于 2012-12-12T14:40:09.370 回答
0

null 的计算结果为 false,但请记住,还有更多涉及 null 的细节(例如:使用 ===)。

请查看此页面。它更详细地介绍了这一点: http ://www.mapbender.org/JavaScript_pitfalls:_null,_false,_undefined,_NaN

于 2012-12-12T14:38:17.850 回答