本文將詳細介紹javascript運算式,運算式分為原始運算式和複雜運算式。一般,關於javascript基礎文法,人們聽得比較多的術語是操作符和語句。但,其實還有一個術語經常使用,卻很少被提到,這就是javascript運算式(expression)。
原始運算式(primary exression)
原始運算式是運算式的最小單位——它不再包含其他運算式。javascript中的原始運算式包括this關鍵字、標識符引用、字面量引用、數組初始化、對象初始化和分組運算式
PrimaryExpression : this Identifier Literal ArrayLiteral ObjectLiteral ( Expression )
this關鍵字和標識符
this;//返回當前對象
i;//返回變數i的值
sum;//返回變數sum的值
字面量
字面量(literal),又翻譯成直接量,就是程式中直接使用的資料值
Literal ::NullLiteralBooleanLiteralNumericLiteralStringLiteral RegularExpressionLiteral null;undefined;true;false;1;'abc';/pattern/;
數組和對象初始化
數組初始化和對象初始化實際上是一個以字面量的方式描述的初始化的過程。這兩個初始設定式有時稱做"對象直接量"和"數組直接量"
分組運算式
分組運算式實際上就是括弧,用於重寫運算子的優先順序
複雜運算式(MemberExpression)
複雜運算式是由原始運算式和操作符(operator)組合而成,包括屬性訪問運算式、對象建立運算式和函數運算式
MemberExpression : MemberExpression [ Expression ] MemberExpression . IdentifierName new MemberExpression ArgumentsFunctionExpression
屬性訪問運算式
屬性訪問運算式運算可以得到一個對象屬性或一個數組元素的值,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();
以上所述是小編給大家介紹的JavaScript基礎文法之js運算式的相關內容,希望對大家有所協助。如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!