javascript基礎語法——表達式

前面的話

  通常地,關於javascript基礎語法,人們聽得比較多的術語是操做符和語句。可是,其實還有一個術語常常使用,卻不多被提到,這就是javascript表達式(expression)。本文將詳細介紹javascript表達式,表達式分爲原始表達式和複雜表達式javascript

 

原始表達式(primary exression)

  原始表達式是表達式的最小單位——它再也不包含其餘表達式html

  原始表達式分爲字面量、關鍵字和變量;詳細來講包括this關鍵字、標識符引用、字面量引用、數組初始化、對象初始化和分組表達式java

PrimaryExpression : 
this 
Identifier 
Literal 
ArrayLiteral 
ObjectLiteral 
( Expression )

this關鍵字和標識符express

this;//返回當前對象
i;//返回變量i的值
sum;//返回變量sum的值

字面量數組

  字面量(literal),又翻譯成直接量,就是程序中直接使用的數據值函數

 Literal ::
   NullLiteral
   BooleanLiteral
   NumericLiteral
   StringLiteral 
   RegularExpressionLiteral
null;
undefined;
true;
false;
1;
'abc';
/pattern/;

數組和對象初始化this

  數組初始化和對象初始化其實是一個以字面量的方式描述的初始化的過程。這兩個初始化表達式有時稱作"對象字面量"和"數組字面量"spa

[];
[1,2,3];
{};
{a:1};

分組表達式翻譯

  分組表達式實際上就是括號,用於重寫運算符的優先級code

 

複雜表達式(MemberExpression)

  複雜表達式由原始表達式和操做符(operator)組合而成,包括屬性訪問表達式、對象建立表達式和函數表達式

MemberExpression : 
MemberExpression [ Expression ] 
MemberExpression . IdentifierName 
new MemberExpression Arguments
FunctionExpression 

屬性訪問表達式

  屬性訪問表達式運算能夠獲得一個對象屬性或一個數組元素的值,javascript爲屬性訪問定義了兩種語法

MemberExpression . IdentifierName 
MemberExpression [ Expression ] 

  第一種寫法是一個表達式後跟隨一個句點和標識符。表達式指定對象,標識符則指定須要訪問的屬性的名稱

  第二種寫法是使用方括號,方括號內是另一個表達式(這種方法適用於對象和數組)。第二個表達式指定要訪問的屬性的名稱或表明要訪問數組元素的索引

var o = {x:1,y:{z:3}}; //對象字面量
var a = [o,4,[5,6]]; // 包含對象的數組字面量
o.x;//表達式o的x屬性
o.y.z;//表達式o.y的z屬性
o['x'];//對象o的x屬性
a[1];//表達式a中索引爲1的元素

  無論使用哪一種形式的屬性訪問表達式,在'.'和'['以前的表達式老是會首先計算

  若是計算結果是null或undefined,表達式會拋出一個類型錯誤異常,由於這兩個值都不能包含任意屬性

  若是計算結果不是對象,javascript會將其轉換爲對象

  若是對象表達式後跟隨句點和標識符,則會查找由這個標識符指定的屬性值,並將其做爲整個表達式的值返回

  若是對象表達式後跟隨一對方括號,則會計算方括號內的表達式的值並將其轉換爲字符串

  不論哪一種狀況,若是命名的屬性不存在,那麼整個屬性訪問表達式的值就是undefined

對象建立表達式

  對象建立表達式建立一個對象並調用一個函數初始化新對象的屬性

new Object();
new Point(2,3);

  若是一個對象建立表達式不須要傳入任何參數給構造函數的話,那麼這對空圓括號是能夠省略的

new Object;

函數表達式

  函數表達式分爲函數定義表達式和函數調用表達式

  函數定義表達式定義一個javascript函數,表達式的值是這個新定義的函數

  一個典型的函數定義表達式包含關鍵字function,跟隨其後的是一對圓括號,括號內是一個以逗號分割的列表,列表含有0個或多個標識符(參數名),而後再跟隨一個由花括號包裹的javascript代碼段(函數體)

function square(x){
    return x*x;
}

  函數定義表達式一樣能夠包含函數的名字,函數也能夠經過函數語句來定義,而不是函數表達式

var square = function(x){return x*x;}

  函數調用表達式是一種調用或執行函數或方法的語法表示。若是這個表達式是一個屬性訪問表達式,那麼這個調用稱作方法調用

f(0);
Math.max(x,y,z);
a.sort();

 

參考資料

【1】 ES5/表達式 https://www.w3.org/html/ig/zh/wiki/ES5/expressions【2】《javascript權威指南(第6版)》第4章 表達式和運算符【3】《javascript語言精粹(修訂版)》第2章 語法

相關文章
相關標籤/搜索