《javascript語言精髓與編程實踐》——javascript運算子語義的二義性

來源:互聯網
上載者:User

1.  +  

    ⑴ 表示字串串連;一個運算式中如果存在字串,則優先按照字串串連來進行運算  (原生javascript)

    (2) 表示數字取正的一元運算子;  如+5,這是一個運算式,其中+是運算子,5是運算元;

    (3) 表示數值的求和運算;

2.  ()

   (1)語句的詞法元素

   (2)作為“傳值參數表”

   (3)用於強製表達式運算

3. :

  (1)聲明直接量對象的成員和聲明標籤

  (2)在switch語句中聲明一個分支

  (3)在三元運算式中作為一個運算子

4. {}

  (1)表示複合陳述式

  (2)聲明對象直接量

  (3)函數直接量聲明時的文法符號

  (4)結構化異常處理的文法符號

 5. ,

  (1).可以作為連續運算子使用     a=(1,2,3)  返回3   b=1,2,3  返回的是3,在b賦值為1後。會繼續運算後面的,可以用console.log(b=1,2,3)  //輸出為1 2 3

  (2)數組(或變數)聲明時的文法分隔字元 

 6. []

 (1).聲明數組的直接量

 (2).當作存取數組的下標運算子  

  a=[[1][1]]  得到一個[undefined]  原因如下:

    第一個[1]作為一個數組直接量,第二個[1]作為存取數組的下標的運算子。因為[1]只有一個元素。因此[1][1]為undefined  所以會得到[undefined]

 b=[[1,2,3][2]]   //[3]

 c=[[][]]   //報錯,因為第二個作為存取數組的下標運算子,索引值不可為空

 (3)當作存取對象的下標運算子

   

var table =[['a',1,2,3]   //此處漏掉一個逗號['b',4,5],['c',6,7]]
上面的['a',1,2,3]被解析成一個數組,而['b',4,5]被解析成一個存取數組的下標運算子,因為 ','被當成是連續運算子,因此['b',4,5] => [5]
因此變成
var table =[['a',1,2,3][5],['c',6,7]]
==> var tabel=[undefined,['c',6,7]]

同理:  =======>

var table = [['a',1,2]['b',0,1],['c',3,4]]===>   table = [0,['c',3,4]]var table = [['a','b','c'][1,2],[4,5,6]]====> tabel = ['c',[4,5,6]]var table = [['a','b','c'][1,'length'],[4,5,6]]====> tabel = [3,[4,5,6]]    --->理解為取屬性'length'

 

 

 

相關文章

聯繫我們

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