javascript運(yùn)算符語法全面概述
前面的話
javascript中的運(yùn)算符大多由標(biāo)點(diǎn)符號表示,少數(shù)由關(guān)鍵字表示,它們的語法言簡意賅,它們的數(shù)量卻著實(shí)不少。運(yùn)算符始終都遵循著一些固定語法,只有了解并掌握這些內(nèi)容,才能正確使用運(yùn)算符。本文將主要介紹javascript運(yùn)算符的語法概述
操作數(shù)個數(shù)
javascript的運(yùn)算符總共有46個,如果根據(jù)其操作數(shù)的個數(shù)進(jìn)行分類,則大多數(shù)是二元運(yùn)算符(binary operator),它們的操作數(shù)都是兩個,它們將兩個表達(dá)式合并成復(fù)雜表達(dá)式
1 + 2; true || false;
javascript中的一元運(yùn)算符(unary operator)將一個表達(dá)式轉(zhuǎn)換為另一個稍復(fù)雜的表達(dá)式,主要包括以下9個:
++ -- - + ~ ! delete typeof void a++; typeof true;
javascript只有一個三元運(yùn)算符(ternary operator),是條件判斷運(yùn)算符?:,它將三個表達(dá)式合并成一個表達(dá)式
2>1 ? 2 : 1;
優(yōu)先級
運(yùn)算符優(yōu)先級控制著運(yùn)算符的執(zhí)行順序,優(yōu)先級高的運(yùn)算符的執(zhí)行總是先于優(yōu)先級運(yùn)算符低的運(yùn)算符
46個運(yùn)算符總共分為14級的優(yōu)先級,從高到低依次是:
++ -- - + ~ ! delete typeof void * / % + - << >> >>> < <= > >= instanceof in == != === !== & ^ | && || ?: = *= /= %= += -= &= ^= |= <<= >>= >>>= ,
由這14級的運(yùn)算符優(yōu)先級等級可以看出:
一元運(yùn)算符 > 算術(shù)運(yùn)算符 > 比較運(yùn)算符 > 邏輯運(yùn)算符 > 三元運(yùn)算符 > 賦值運(yùn)算符 > 逗號運(yùn)算符
[注意]邏輯取反運(yùn)算符屬于一元運(yùn)算符,其優(yōu)先級最高
例子
!2<1&&4*3+1;
像上面這種情況就比較復(fù)雜,逐步來分解其運(yùn)算順序
先計(jì)算一元運(yùn)算符!,!2;//false
//于是表達(dá)式變?yōu)? false < 1 && 4*3 + 1;
計(jì)算算術(shù)運(yùn)算符4*3+1;//13
//于是表達(dá)式變?yōu)? false < 1 && 13;
計(jì)算比較運(yùn)算符<,false<1;//true
//于是表達(dá)式變?yōu)? true && 13;//13
可以使用圓括號來強(qiáng)行指定運(yùn)算次序
2+3*5;//17 (2+3)*5;//25;
結(jié)合性
運(yùn)算符具有兩種結(jié)合性,一種是從左向右結(jié)合,記號為L,一種是從右向左結(jié)合,記號為R。結(jié)合性指定了在多個具有同樣優(yōu)先級的運(yùn)算符表達(dá)式中的運(yùn)算順序
多數(shù)運(yùn)算符都具有從左向右的結(jié)合性,只有一元運(yùn)算符、條件運(yùn)算符和賦值運(yùn)算符具有從右向左的結(jié)合性
w = x + y + z; //等價(jià)于: w = ((x + y)+ z);
w = x = y = z; //等價(jià)于: w = (x = (y = z));
q = a ? b : c ? d : e ? f : g; //等價(jià)于: q = a ? b : (c ? d : (e ? f : g));
運(yùn)算符的優(yōu)先級和結(jié)合性決定了它們在復(fù)雜表達(dá)式中的運(yùn)算順序,但子表達(dá)式相互有影響時(shí),順序會發(fā)生變化
例子
a = 1; b = a++ + a-- * a++;
先分析該表達(dá)式中,根據(jù)優(yōu)先級的順序,分別運(yùn)算遞增運(yùn)算符、乘法運(yùn)算符、加法運(yùn)算符和賦值運(yùn)算符
先計(jì)算第一個a++;//結(jié)果為1,a為2
//表達(dá)式變成 b = 1 + a-- * a++;
計(jì)算a--;//結(jié)果為2,a為1
//表達(dá)式變成 b = 1 + 2 * a++;
計(jì)算第二個a++;//結(jié)果為1,a為2
//表達(dá)式變成 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
類型
一些運(yùn)算符可以作用于任何數(shù)據(jù)類型,但仍然希望它們的操作數(shù)是指定類型的數(shù)據(jù),并且大多數(shù)運(yùn)算符返回一個特定類型的值,在下面的運(yùn)算符規(guī)則表中,箭頭前為運(yùn)算符操作數(shù)的類型,箭頭后為運(yùn)算結(jié)果的類型
【左值】
左值(lvalue)是一個古老的術(shù)語,指表達(dá)式只能出現(xiàn)在運(yùn)算符的左側(cè)
在javascript中,變量、對象屬性和數(shù)組元素都是左值
遞增運(yùn)算符++、遞減運(yùn)算符--和賦值運(yùn)算符的操作數(shù)類型是左值
var a = 3; a++;//3 3--;//報(bào)錯 ({}).a += '1';//'undefined1' 'test' -= 'test';//報(bào)錯
運(yùn)算符規(guī)則表
運(yùn)算符 操作 類型 ++ 增量 lval->num -- 減量 lval->num - 求反 num->num + 轉(zhuǎn)換為數(shù)字 num->num ~ 按位求反 int->int ! 邏輯非 bool->bool delete 刪除屬性 lval->bool typeof 檢測類型 any->str void 返回undefined any->undef ****************************************************** * \ % 乘、除、求余 num,num->num ****************************************************** + - 加、減 num,num->num + 字符串連接 str,str->str ****************************************************** << 左移位 int,int->int >> 有符號右移位 int,int->int >>> 無符號右移位 int,int->int ****************************************************** < <= > >= 比較數(shù)字順序 num,num->bool < <= > >= 比較字母表順序 str,str->bool instanceof 測試對象類 obj,func->bool in 測試屬性 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 ****************************************************** ?: 條件運(yùn)算符 bool,any,any->any ****************************************************** = 賦值 lval,any->any *= /= %= += -= &= 運(yùn)算且賦值 lval,any->any ^= |= <<= >>= >>>= ****************************************************** , 忽略第一個操作數(shù), any,any->any 返回第二個操作數(shù)
以上這篇javascript運(yùn)算符語法全面概述就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入解析JavaScript中的立即執(zhí)行函數(shù)
立即執(zhí)行函數(shù)模式在JavaScript中可以讓你的函數(shù)在定義后立即被執(zhí)行,下面我們就來深入解析JavaScript中的立即執(zhí)行函數(shù),需要的朋友可以參考下2016-05-05淺談js和css內(nèi)聯(lián)外聯(lián)注意事項(xiàng)
下面小編就為大家?guī)硪黄獪\談js和css內(nèi)聯(lián)外聯(lián)注意事項(xiàng)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06如何做到打開一個頁面,過幾分鐘自動轉(zhuǎn)到另一頁面
如何做到打開一個頁面,過幾分鐘自動轉(zhuǎn)到另一頁面...2007-04-04js中一維數(shù)組和二位數(shù)組中的幾個問題示例說明
這篇文章主要介紹了js中一維數(shù)組和二位數(shù)組中的幾個問題,并給出對應(yīng)的解決方法,需要的朋友可以參考下2014-07-07JavaScript中將數(shù)組進(jìn)行合并的基本方法講解
這篇文章主要介紹了JavaScript中將數(shù)組進(jìn)行合并的基本方法講解,包括快速合并多個數(shù)組的方法,需要的朋友可以參考下2016-03-03javascript中遞歸函數(shù)用法注意點(diǎn)
這篇文章主要針對javascript中遞歸函數(shù)用法注意點(diǎn)做介紹,有需要小伙伴可以來學(xué)習(xí)下2015-07-07