运算符的 Javascript 评估顺序

标签 javascript evaluation

在所有浏览器(尤其是 IE6+、F3+、Opera 9+、Chrome)中,以下哪个表达式始终位于从左到右的前面?例如,窗口应该始终提示 first function 然后是 second function。在 C 中,他们总是建议不要依赖于表达式求值的顺序。 JavaScript 也是一样还是运算符优先级一致?

function first(){
    alert('first function');
    return 0;
}
function second(){
    alert('second function');
    return 23;
}
first() + second();
first() - second();
first() * second();
first() / second();
first() < second();
first() > second();

使用 mozilla看起来功能评估应该在所有浏览器中保持一致,但显然并不总是遵循标准。

测试

在 browsershots.org 上进行了一些测试后,似乎所有浏览器都遵循该标准。
一般来说 异常(exception)情况是依赖于 javascript 中的 valueOf 方法。 ValueOf 在谷歌浏览器的特定情况下肯定会向后调用。

// The following alerts second then first in google chrome
first.valueOf = function(){alert('first');};
second.valueOf = function(){alert('second');};
first > second;

最佳答案

ECMAScript 5指定所有运算符的操作数的评估顺序。对于代码片段中的每个运算符,评估顺序都是从左到右的。不过,我不确定是否有人可以回答有关所有 浏览器行为的问题。

编辑:另见 ECMAScript 3.评估顺序的定义方式相同。

关于运算符的 Javascript 评估顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944593/

相关文章:

javascript - 提交后不要清除输入

scala - Scala 中的按名称调用与 Haskell 中的惰性求值?

PowerShell:1234 和 (1234) 有什么区别?

javascript - ExtJs 5.1.0 - 无法识别的类名/别名 : widget. 笛卡尔

javascript - 将子 DIV 放置在父 DIV 的底部

javascript - SyntaxError : expected expression, 得到 '<' 尝试转义但不起作用

javascript - 有条件地在 return 语句中包含 json 字段

javascript - 评估 PHP 和 JavaScript 中的二进制运算

haskell - idris 热切评价

matlab - 集群质量措施