前面的話
javascript中的運算符大多由標點符號表示,少數由關鍵字表示,它們的語法言簡意賅,它們的數量卻著實不少。運算符始終都遵循著一些固定語法,只有了解並掌握這些內容,才能正確使用運算符。本文將主要介紹javascript運算符的語法概述
操作數個數
javascript的運算符總共有46個,如果根據其操作數的個數進行分類,則大多數是二元運算符(binary operator),它們的操作數都是兩個,它們將兩個表達式合併成複雜表達式
1 + 2;true || false;
javascript中的一元運算符(unary operator)將一個表達式轉換為另一個稍複雜的表達式,主要包括以下9個:
++ -- - + ~ ! delete typeof voida++;typeof true;
javascript只有一個三元運算符(ternary operator),是條件判斷運算符?:,它將三個表達式合併成一個表達式
2>1 ? 2 : 1;
優先級
運算符優先級控制著運算符的執行順序,優先級高的運算符的執行總是先於優先級運算符低的運算符
46個運算符總共分為14級的優先級,從高到低依次是:
++ -- - + ~ ! delete typeof void * / % + - << >> >>> < <= > >= instanceof in == != === !== & ^ |&&||?:= *= /= %= += -= &= ^= |= <<= >>= >>>=,
由這14級的運算符優先級等級可以看出:
一元運算符> 算術運算符> 比較運算符> 邏輯運算符> 三元運算符> 賦值運算符> 逗號運算符
[注意]邏輯取反運算符屬於一元運算符,其優先級最高
例子
!2<1&&4*3+1;
像上面這種情況就比較複雜,逐步來分解其運算順序
先計算一元運算符!,!2;//false
//於是表達式變為false < 1 && 4*3 + 1;
計算算術運算符4*3+1;//13
//於是表達式變為false < 1 && 13;
計算比較運算符<,false<1;//true
//於是表達式變為:true && 13;//13
可以使用圓括號來強行指定運算次序
2+3*5;//17(2+3)*5;//25;
結合性
運算符具有兩種結合性,一種是從左向右結合,記號為L,一種是從右向左結合,記號為R。結合性指定了在多個具有同樣優先級的運算符表達式中的運算順序
多數運算符都具有從左向右的結合性,只有一元運算符、條件運算符和賦值運算符具有從右向左的結合性
w = x + y + z;//等價於:w = ((x + y)+ z);
w = x = y = z;//等價於:w = (x = (y = z));
q = a ? b : c ? d : e ? f : g;//等價於:q = a ? b : (c ? d : (e ? f : g));
運算符的優先級和結合性決定了它們在復雜表達式中的運算順序,但子表達式相互有影響時,順序會發生變化
例子
a = 1;b = a++ + a-- * a++;
先分析該表達式中,根據優先級的順序,分別運算遞增運算符、乘法運算符、加法運算符和賦值運算符
先計算第一個a++;//結果為1,a為2
//表達式變成b = 1 + a-- * a++;
計算a--;//結果為2,a為1
//表達式變成b = 1 + 2 * a++;
計算第二個a++;//結果為1,a為2
//表達式變成b = 1 + 2 * 1;
所以,最終a = 2; b = 3;
a = 1;b = a++ + a-- * a++;console.log(a,b);//2 3
//類似地a = 1;b = a-- * a++ + a++;console.log(a,b);//2,1
類型
一些運算符可以作用於任何數據類型,但仍然希望它們的操作數是指定類型的數據,並且大多數運算符返回一個特定類型的值,在下面的運算符規則表中,箭頭前為運算符操作數的類型,箭頭後為運算結果的類型
【左值】
左值(lvalue)是一個古老的術語,指表達式只能出現在運算符的左側
在javascript中,變量、對象屬性和數組元素都是左值
遞增運算符++、遞減運算符--和賦值運算符的操作數類型是左值
var a = 3;a++;//33--;//報錯({}).a += '1';//'undefined1''test' -= 'test';//報錯運算符規則表
運算符操作類型++ 增量lval->num-- 減量lval->num- 求反num->num+ 轉換為數字num->num~ 按位求反int->int! 邏輯非bool->booldelete 刪除屬性lval->booltypeof 檢測類型any->strvoid 返回undefined any->undef******************************************************* / % 乘、除、求餘num,num->num******************************************************+ - 加、減num,num->num+ 字符串連接str,str->str******************************************************<< 左移位int,int->int>> 有符號右移位int,int->int>>> 無符號右移位int,int->int******************************************************< <= > >= 比較數字順序num,num->bool< <= > >= 比較字母表順序str,str->boolinstanceof 測試對像類obj,func->boolin 測試屬性str,obj->bool******************************************************== 判斷相等any,any->bool!= 判斷不等any,any->bool=== 判斷恆等any,any->bool!== 判斷非恆等any,any->bool******************************************************& 按位與int,int->int******************************************************^ 按位異或int,int->int******************************************************| 按位或int,int->int******************************************************&& 邏輯與any,any->any******************************************************|| 邏輯或any,any->any******************************************************?: 條件運算符bool,any,any->any******************************************************= 賦值lval,any->any*= /= %=+= -= &= 運算且賦值lval,any->any^= |= <<=>>= >>>=******************************************************, 忽略第一個操作數, any,any->any 返回第二個操作數
以上這篇javascript運算符語法全面概述就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。