JS中表達式的理解
阿新 • • 發佈:2019-01-02
作者:鄭航
連結:http://www.zhihu.com/question/39420977/answer/81250170
來源:知乎
著作權歸作者所有,轉載請聯絡作者獲得授權。
表示式:是由運算元和運算子(可選)構成,併產生運算結果的語法結構。
以下在ES5中被稱為基本表示式(Primary Expression)
除基本表示式以外,還有如下表達式,稱為複雜表示式,這類表示式需要其它表示式參與:
連結: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;
就是一個表示式語句。