表達式:是由運算元和運算符(可選)構成,並產生運算結果的語法結構。
基本表達式
以下在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類型的表達式(ES6新增的一種數據類型,Symbol可用來定義對象的唯一屬性名;) - 函數定義表達式(注意,需與函數聲明語句區分開)
- 屬性訪問表達式:之前一直以為跟在對象后面的句點或者方括號是運算符,實際上不是,它們是屬性訪問表達式的語法結構的一部分。屬性訪問表達式語法如下:
expression.identifier 其中,expression可以是任意的表達式,identifier是屬性名(必須合法)
expression1[expression2] 其中,兩個expression可以是任意的表達式 expression2的值會被轉化為字符串(除非它是一個Symbol類型)
- 調用表達式: 分為“方法調用”與“函數調用”。方法調用的語法是:
expression0([[expression1[,expression2[,expression3]]]) 其中,expression是一個返回值為函數對象的屬性訪問表達式,小括號提供一個逗號分隔的參數列表。
JavaScript表達式總有返回值,其中,單值表達式的結果是值本身,其他表達式結果是根據運算符進行運算的結果值。
由於每個表達式都有返回值,因此每個表達式都能作為“鄰近”的表達式的運算元參與運算。可以將無限個表達式“鄰近”地連接成復合表達式
總結:分類如下
- 單值表達式:不使用運算符的表達式
- 簡單表達式:不能再分解的表達式
- 復雜表達式:需要其它表達式參與的表達式
- 復合表達式:由運算符將多個單值表達式結合而成的表達式
所有表達式均有返回值
===============================語句:JavaScript代碼由語句構成,表明了執行過程的流程、限定和約定,形式上可以是單行語句,也可以是由大括號括起來的復合語句。語句由分號來分隔。語句是“使某事發生”的指令,不存在返回值一說
當語句位於以下地點之一時,可以省略分號(不會出現語法錯誤,但可能造成執行階段的錯誤):
- 一行的最后
- 整個代碼文件的最后
- 在語法分隔符之前(如復合語句的大括號“}”)
- 復合語句的大括號“}”之后
其它情況下遺漏分號,會在語法分析過程中報錯,全部代碼完全不執行。
語句中比較特殊的一類是表達式語句,表示“只有表達式,沒有其它語法元素的語句”,例如:
1+2+3;
就是一個表達式語句。
鏈接:https://www.zhihu.com/question/39420977/answer/81250170