JavaScript運算子優先順序引起的bug

來源:互聯網
上載者:User

[下面是昨天發給同事的郵件,為防止泄露商業機密,隱去了項目名和變數名]

====================================================

昨天發現Nx代碼中的一個bug,是由於JavaScript運算子優先順序問題引起的。

例子:

if (!a instanceof Array)

throw new Error("a should be an array");

......

if (!b instanceof Object)

throw new Error("b should be an object");

原因:! Operator的優先順序比instanceof的優先順序要高,所以先計算!a, 結果為boolean類型。

true instanceof Array;

false instanceof Array;

true instanceof Object;

false instanceof Object;

都會返回false, 這導致所有的檢查都不起作用,J

下面摘錄的是JavaScript中運算子優先順序, 以供參考。

運算子優先順序 (JavaScript)

4(共 5)對本文的評價是有協助 - 評價此主題

運算子優先順序描述了在計算運算式時執行運算的順序。 先執行具有較高優先順序的運算,然後執行較低優先順序的運算。 例如,先執行相乘,再執行相加。

JavaScript 運算子

下表列出了 JavaScript 運算子,並按優先順序順序從高到低排列。 具有相同優先順序的運算子按從左至右的順序計算。

運算子

說明

. [] ()

欄位訪問、數組索引、函數調用和運算式分組

++ -- - ~ ! delete new typeof void

一元運算子、返回資料類型、對象建立、未定義的值

* / %

相乘、相除、求餘數

+ - +

相加、相減、字串串聯

<< >> >>>

移位

< <= > >= instanceof

小於、小於或等於、大於、大於或等於、是否為特定類的執行個體

== != === !==

相等、不相等、全等、不全等

&

按位“與”

^

按位“異或”

|

按位“或”

&&

邏輯與

||

邏輯“或”

?:

條件運算

= OP=

賦值、賦值運算(如 += 和 &=)

,

多個計算

圓括弧用於改變由運算子優先順序確定的計算順序。 這就是說,先計算完圓括弧內的運算式,然後再將它的值用於運算式的其餘部分。

來源:http://technet.microsoft.com/zh-cn/library/z3ks45k7

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.