运营商的Javascript评估顺序

Lim*_*ime 8 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();
Run Code Online (Sandbox Code Playgroud)

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

测试

在browsershots.org上进行一些测试后,所有浏览器都会遵循该标准.
通常异常是valueOf在javascript中依赖方法时. ValueOf在谷歌浏览器的特定情况下肯定会被称为倒退.

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

Jak*_* T. 8

ECMAScript 5指定了所有运算符的操作数的评估顺序.对于代码中的每个操作符,剪辑的评估顺序是从左到右.我不确定是否有人可以回答所有浏览器的行为.

编辑:另请参阅ECMAScript 3.评估顺序的定义方式相同.


Cla*_*diu 5

将表达式计算为一个值(例如涉及函数调用)总是从左到右进行。

但是,一旦您比较两个值,它们就不会转换为基元,以便以从左到右的方式进行实际比较。例如,在 Chrome 中尝试以下操作:

var l = {valueOf: function() { alert("L"); }};
var r = {valueOf: function() { alert("R"); }};

l < r; //alerts "L", then "R"
l > r; //alerts "R", then "L"
Run Code Online (Sandbox Code Playgroud)