JS中表達式的理解

轉載出處:

作者:鄭航
鏈接:http://www.zhihu.com/question/39420977/answer/81250170
來源:知乎
著作權歸作者所有,轉載請聯繫作者獲得授權。

表達式:是由運算元和運算符(可選)構成,併產生運算結果的語法結構。

以下在ES5中被稱爲基本表達式(Primary Expression)
  • this、null、arguments等內置的關鍵字
  • 變量。即一個已聲明的標識符
  • 字面量。僅包括數字字面量、布爾值字面量、字符串字面量、正則字面量
  • 分組表達式,即用來表示立刻進行計算的
這類表達式是原子表達式,是無法再分解的表達式。

除基本表達式以外,還有如下表達式,稱爲複雜表達式,這類表達式需要其它表達式參與
  • 對象的初始化表達式、數組的初始化表達式:分明也是字面量的一種,但不把它們算作基本表達式,是因爲對象字面量、數組字面量所包含的成員也都是表達式。數組初始化表達式語法如下:
    [expression,expression,expression]
    
    可以有0個及其以上個子表達式
    
    對象的初始化表達式如下:
    {
      expression1: expression2,
      expression1: expression2,
      expression1: expression2
    }
    在ES5及其之前,expression1只能是字符串字面量;
    
    ES6開始支持如下語法:
    
    {
      [expression1]: expression,
      [expression1]: expression,
      [expression1]: expression
    }
    
    expression1可以是任何返回值爲字符串或Symbol類型的表達式
    

  • 函數定義表達式(注意,需與函數聲明語句區分開)
  • 屬性訪問表達式:之前一直以爲跟在對象後面的句點或者方括號是運算符,實際上不是,它們是屬性訪問表達式的語法結構的一部分。屬性訪問表達式語法如下:
    expression.identifier
    
    其中,expression可以是任意的表達式,identifier是屬性名(必須合法)
    
    或者
    expression1[expression2]
    
    其中,兩個expression可以是任意的表達式
    expression2的值會被轉化爲字符串(除非它是一個Symbol類型)
    
  • 調用表達式: 分爲“方法調用”與“函數調用”。方法調用的語法是:
    expression0([[expression1[,expression2[,expression3]]])
    
    其中,expression是一個返回值爲函數對象的屬性訪問表達式,小括號提供一個逗號分隔的參數列表。
    
函數調用的語法是:
expression0([expression1[,expression2[,expression3]]])

其中,expression0是一個返回值爲函數對象的表達式,
小括號提供一個逗號分隔的參數列表
可見,小括號並非一個操作符,而是調用表達式的語法的一部分
  • 對象創建表達式:語法如下:
    new expression0([expression1[,expression2[,expression3]]])
    
    其中,expression0是一個返回值爲函數對象的表達式,
    小括號提供一個逗號分隔的參數列表(整個小括號內部的參數列表是可以省略的)
    
    可見,小括號並非一個操作符,而是調用表達式的語法的一部分

----------------

以上所有表達式,由於未使用運算符,稱爲單值表達式。除此之外的叫做複合表達式

JavaScript表達式總有返回值,其中,單值表達式的結果是值本身,其他表達式結果是根據運算符進行運算的結果值。


由於每個表達式都有返回值,因此每個表達式都能作爲“鄰近”的表達式的運算元參與運算。可以將無限個表達式“鄰近”地連接成複合表達式


總結:分類如下

  • 單值表達式:不使用運算符的表達式
    • 簡單表達式:不能再分解的表達式
    • 複雜表達式:需要其它表達式參與的表達式

  • 複合表達式:由運算符將多個單值表達式結合而成的表達式


所有表達式均有返回值

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

語句:JavaScript代碼由語句構成,表明了執行過程的流程、限定和約定,形式上可以是單行語句,也可以是由大括號括起來的複合語句。語句由分號來分隔。語句是“使某事發生”的指令,不存在返回值一說


當語句位於以下地點之一時,可以省略分號(不會出現語法錯誤,但可能造成執行階段的錯誤):

  • 一行的最後
  • 整個代碼文件的最後
  • 在語法分隔符之前(如複合語句的大括號“}”)
  • 複合語句的大括號“}”之後

其它情況下遺漏分號,會在語法分析過程中報錯,全部代碼完全不執行。


語句中比較特殊的一類是表達式語句,表示“只有表達式,沒有其它語法元素的語句”,例如:

1+2+3;

就是一個表達式語句。


發佈了101 篇原創文章 · 獲贊 60 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章