根據 JavaScript 的運算子優先級表,我可以看到它&&的優先級高于||.
因此,對于以下代碼片段:
let x, y;
let z = 5 || (x = false) && (y = true);
console.log(z); // 5
console.log(x); // undefined
console.log(y); // undefined
我認為&&應該首先評估,在短路&&部件后,x將被賦值false。然后只有,||將被嘗試進行評估。
但是,從 的輸出中console.log,我可以清楚地看到情況并非如此。
有人可以幫我我在這里想念什么嗎?
提前致謝。
uj5u.com熱心網友回復:
&&of的運算子優先級||意味著:
let z = 5 || (x = false) && (y = true);
被評估為:
let z = 5 || ((x = false) && (y = true));
而不是作為
let z = (5 || (x = false)) && (y = true);
它不是指示何時評估運算子每一側的值的東西。這是由每個操作員的機制完成的。例如,對于||,它在此處指定:
1. Let lref be the result of evaluating LogicalANDExpression.
2. Let lval be ? GetValue(lref).
3. Let lbool be ToBoolean(lval).
4. If lbool is false, return lval.
5. Let rref be the result of evaluating BitwiseORExpression.
6. Return ? GetValue(rref).
GetValue(lref)它在運行前進行評估GetValue(rref)。
換句話說,運算子優先級指示哪些令牌應用于哪個運算子,以及以什么順序,但不是給定運算子如何/何時評估其左側和右側的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462989.html
標籤:javascript 运算符优先级
