JavaScript 基本文法 -- 運算子的優先順序

來源:互聯網
上載者:User

標籤:異或   區別   賦值   對象   算術運算   刪除   body   idt   自增   

在所有的運算裡,都是有運算順序的。小時候學算術運算的時候,我們都知道這麼一個規則:先乘除後加減,有括弧要先算括弧!

同樣的,在JavaScript裡面,運算子的優先順序如下表所示,前面的優先順序高於後面的 

運算子 操作
++ 自增(注意前後的區別)
-- 自減(注意前後的區別)
- 求反(針對數字)
+ 轉換成數字 
按位求反 
! 邏輯非 
delete, typeof, void  刪除屬性,檢查資料類型,返回undefined的值 
*, /, %
乘,除,求餘 
+, - 加,減 
+ 字串串連 
<<, >>, >>> 左移位,有符號的右移位,無符號的右移位
<, <=, >, >= 比較大小,先比數字,後比字母 
== 判斷是否相等 
!= 判斷是否不等 
=== 判斷是否恒等 
!== 判斷是否不恒等 
& 按位與 
按位異或 
| 按位或 
&&  邏輯與 
|| 邏輯或 
?: 條件運算子 
= 賦值運算子 
op=  運算且賦值 

 

 

下面舉個栗子

var a = {n: 1};var b = a;a.x = a = {n: 2};console.log(a.x); // undefinedconsole.log(b.x); // {n: 2}// a => {n: 2}// b => {//        n: 1, //        x: {n: 2 }//      }

 

解析:
雖然賦值運算子是從右至左計算,但是這裡也有一個很重要的考點:運算子的優先順序

.點號運算 優於 =賦值運算,因此 a.x = a = {n: 2} 可以理解為:

1). 聲明a對象中的x屬性,而此時b和a同時指向對象{n: 1, x: undefined},即同時擁有未賦值的x
2). 從右至左開始賦值
  1>. 對 a對象 賦值 -- a = {n: 2},此時變數名a改變指向 到 新對象{n: 2}
  2>. 對 a.x(可以理解為b.x,就是說a.x已經確定了指向,因此不會受到1>步的影響) 屬性賦值{n: 2},此時對象b -> {n:1, x:{n:2}}

 

JavaScript 基本文法 -- 運算子的優先順序

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.