如果你不懂js運算子優先順序,那絕對不是js高手。

桃D再不斬發表於2018-12-27

如果你不懂js運算子優先順序,那絕對不是js高手。
用new建立建構函式的例項時,通常情況下new 的建構函式後面需要帶括號(譬如:new Parent())。 有些情況下new的建構函式後帶括號和不帶括號的情況一致,譬如:

function Parent(){
  this.num = 1;
}
console.log(new Parent());//輸出Parent物件:{num:1}
console.log(new Parent);//輸出Parent物件:{num:1}
複製程式碼

執行結果如下

如果你不懂js運算子優先順序,那絕對不是js高手。
但有些情況下new的建構函式後帶括號和不帶括號的情況並不一致,譬如

function Parent(){
  this.num = 1;
}
console.log(new Parent().num);//1
console.log(new Parent.num);//報錯
複製程式碼

為什麼到這裡就報錯了呢?因為這裡涉及到了js運算子優先順序,廢話不多說附上一張表格:

如果你不懂js運算子優先順序,那絕對不是js高手。

所以此處涉及到的優先順序為: 圓括號>new()>函式呼叫>new

結果分析:

1、從報錯資訊來看,new Parent.num執行順序是這樣的:先執行Parent.num,此時返回結果為undefined;後執行new,因new後面必須跟建構函式,所以new undefined會報錯。

解決辦法為: (new Parent).num.原來因為.的優先順序大於new,先執行了Parent.num。加上()後,()優先順序大於. 所以先執行new Parent ,返回的是例項。

執行結果附圖:

如果你不懂js運算子優先順序,那絕對不是js高手。

2、new Parent().num相當於(new Parent()).num,所以結果返回1。

牢牢把握兩個基本點,以認真學習javascript為中心,早日實現成為前端高手的偉大夢想!

如果你不懂js運算子優先順序,那絕對不是js高手。

相關文章