1. 程式人生 > >理解JS表達式

理解JS表達式

rip pri 字符 asc 不能 rim 方括號 情況下 屬性

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

基本表達式

以下在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是一個返回值為函數對象的屬性訪問表達式,小括號提供一個逗號分隔的參數列表。
    

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

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


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


總結:分類如下

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

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


所有表達式均有返回值

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

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


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

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

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


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

1+2+3;

就是一個表達式語句。

鏈接:https://www.zhihu.com/question/39420977/answer/81250170

理解JS表達式