版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/ab20514/article/details/51065940
一.什麼是表達式
- 表達式是ECMAScript中的一個“短語”,解析器會通過計算把它轉換成一個值。最簡單的表達式是字面量或者變量名。例如:
5.96 //數值字面量
'Lee' //字符串字面量
true //布爾值字面量
null //空值字面量
/Java/ //正則表達式字面量
{x:1, y:2} //對象字面量、對象表達式
[1,2,3] //數組字面量、數組表達式
function(n) {return x+y;} //函數字面量、函數表達式
box //變量
- 通過合併簡單的表達式來創建複雜的表達式。比如:
box + 5.96 //加法運算的表達式
typeof(box) //查看數據類型的表達式
box > 8 //邏輯運算表達式
- 單一的字面量和組合字面量的運算符都可稱爲表達式
二.一元運算符
只能操作一個值的運算符叫做一元運算符
- 1.遞增++和遞減–
- 2.前置和後置的區別
- 沒有賦值操作,前置和後置是一樣的
- 有賦值操作時
- 前置的運算符會先累加(累減)再賦值
- 後置運算符則先賦值再累加或累減
var box = 100; var age = ++box; //age值爲101 var height = box++; //height值爲100
3.其他類型應用一元運算符的規則
var box = '89'; box++; //90,數值字符串自動轉換成數值 var box = 'ab'; box++; //NaN,字符串包含非數值轉成NaN var box = false; box++; //1,false轉成數值是0,累加就是1 var box = 2.3; box++; //3.3,直接加1 var box = { //1,不設置toString或valueOf即爲NaN toString : function() { return 1; } }; box++;
4.加和減運算符
var box = 100; +box; //100,對於數值,不會產生任何影響 var box = '89'; +box; //89,數值字符串轉換成數值 var box = 'ab'; +box; //NaN,字符串包含非數值轉成NaN var box = false; +box; //0,布爾值轉換成相應數值 var box = 2.3; +box; //2.3,沒有變化 var box = { //1,不設置toString或valueOf即爲NaN toString : function() { return 1; } }; +box;
三.算術運算符
- 1.加法
var box = 1 + 2; //等於3
var box = 1 + NaN; //NaN,只要有一個NaN就爲NaN
var box = Infinity + Infinity; //Infinity
var box = -Infinity + -Infinity; //-Infinity
var box = Infinity + -Infinity; //NaN,正無窮和負無窮相加等NaN
var box = 100 + '100'; //100100,字符串連接符,有字符串就不是加法
var box = '您的年齡是:' + 10 + 20; //您的年齡是:1020,被轉換成字符串
var box = 10 + 20 + '是您的年齡'; //30是您的年齡,沒有被轉成字符串
var box = '您的年齡是:' + (10 + 20); //您的年齡是:30,沒有被轉成字符串
var box = 10 + {}; //10[object Object]類型是string
var box = 10 + 對象 //10[object Object],如果有toString()或valueOf(),則返回10+返回數的值
- 2.減法
var box = 100 - 70; //等於30
var box = -100 - 70 //等於-170
var box = -100 - -70 //-30,一般寫成-100 - (-70)比較清晰
var box = 1 - NaN; //NaN,只要有一個NaN就爲NaN
var box = Infinity - Infinity; //NaN
var box = -Infinity - -Infinity; //NaN
var box = Infinity - -Infinity; //Infinity
var box = -Infinity - Infinity; //-Infinity
var box = 100 - true; //99,true轉成數值爲1
var box = 100 - ''; //100,''轉成了0
var box = 100 - '70'; //30,'70'轉成了數值70
var box = 100 - null; //100,null轉成了0
var box = 100 - 'Lee'; //NaN,Lee轉成了NaN
var box = 100 - 對象 //NaN,如果有toString()或valueOf()
則返回10-返回數的值
- 3.乘法
var box = 100 * 70; //7000
var box = 100 * NaN; //NaN,只要有一個NaN即爲NaN
var box = Infinity * Infinity; //Infinity
var box = -Infinity * Infinity ; //-Infinity
var box = -Infinity * -Infinity ; //Infinity
var box = 100 * true; //100,true轉成數值爲1
var box = 100 * ''; //0,''轉成了0
var box = 100 * null; //0,null轉成了0
var box = 100 * 'Lee'; //NaN,Lee轉成了NaN
var box = 100 * 對象 //NaN,如果有toString()或valueOf()
則返回10 - 返回數的值
- 4.除法
var box = 100 / 70; //1.42....
var box = 100 / NaN; //NaN
var box = Infinity / Infinity; //NaN
var box = -Infinity / Infinity ; //NaN
var box = -Infinity / -Infinity; //NaN
var box = 100 / true; //100,true轉成1
var box = 100 / ''; //Infinity,
var box = 100 / null; //Infinity,
var box = 100 / 'Lee'; //NaN
var box = 100 / 對象; //NaN,如果有toString()或valueOf(),則返回10 / 返回數的值
- 5.求模
var box = 10 % 3; //1,餘數爲1
var box = 100 % NaN; //NaN
var box = Infinity % Infinity; //NaN
var box = -Infinity % Infinity ; //NaN
var box = -Infinity % -Infinity; //NaN
var box = 100 % true; //0
var box = 100 % ''; //NaN
var box = 100 % null; //NaN
var box = 100 % 'Lee'; //NaN
var box = 100 % 對象; //NaN,如果有toString()或valueOf(),則返回10 % 返回數的值
四.關係運算符
用於進行比較的運算符稱作爲關係運算符:小於(<)、大於(>)、小於等於(<=)、大於等於(>=)、相等(==)、不等(!=)、全等(恆等)(===)、不全等(不恆等)(!==)
關係運算符操作非數值時要遵循一下規則:
- 1.兩個操作數都是數值,則數值比較;
- 2.兩個操作數都是字符串,則比較兩個字符串對應的字符編碼值;
- 3.兩個操作數有一個是數值,則將另一個轉換爲數值,再進行數值比較;
- 4.兩個操作數有一個是對象,則先調用valueOf()方法或toString()方法,再用結果比較;
var box = 3 > 2; //true
var box = 3 > 22; //false
var box = '3' > 22; //false
var box = '3' > '22'; //true
var box = 'a' > 'b'; //false a=97,b=98
var box = 'a' > 'B'; //true B=66
var box = 1 > 對象; //false,如果有toString()或valueOf(),則返回1 > 返回數的值
- 在相等和不等的比較上,如果操作數是非數值,則遵循一下規則:
- 1.一個操作數是布爾值,則比較之前將其轉換爲數值,false轉成0,true轉成1;
- 2.一個操作數是字符串,則比較之前將其轉成爲數值再比較;
- 3.一個操作數是對象,則先調用valueOf()或toString()方法後再和返回值比較;
- 4.不需要任何轉換的情況下,null和undefined是相等的;
- 5.一個操作數是NaN,則==返回false,!=返回true;並且NaN和自身不等;
- 6.兩個操作數都是對象,則比較他們是否是同一個對象,如果都指向同一個對象,則返回true,否則返回false。
- 7.在全等和全不等的判斷上,比如值和類型都相等,才返回true,否則返回false。
五.邏輯運算符
邏輯運算符通常用於布爾值的操作,一般和關係運算符配合使用,有三個邏輯運算符:邏輯與(AND)、邏輯或(OR)、邏輯非(NOT)
1.邏輯與(AND) :&&
- 如果兩邊的操作數有一個操作數不是布爾值的情況下,與運算就不一定返回布爾值,此時,遵循已下規則:
- 1.第一個操作數是對象,則返回第二個操作數;
- 2.第二個操作數是對象,則第一個操作數返回true,才返回第二個操作數,否則返回false;
- 3.有一個操作數是null,則返回null;
- 4.有一個操作數是undefined,則返回undefined。
var box = 對象 && (5 > 4); //true,返回第二個操作數 var box = (5 > 4) && 對象; //[object Object] var box = (3 > 4) && 對象; //false var box = (5 > 4) && null; //null
- 如果兩邊的操作數有一個操作數不是布爾值的情況下,與運算就不一定返回布爾值,此時,遵循已下規則:
2.邏輯或(OR):||
- 如果兩邊的操作數有一個操作數不是布爾值的情況下,邏輯與運算就不一定返回布爾值,此時,遵循已下規則:
- 1.第一個操作數是對象,則返回第一個操作數;
- 2.第一個操作數的求值結果爲false,則返回第二個操作數;
- 3.兩個操作數都是對象,則返回第一個操作數;
- 4.兩個操作數都是null,則返回null;
- 5.兩個操作數都是NaN,則返回NaN;
- 6.兩個操作數都是undefined,則返回undefined;
var box = 對象 || (5 > 3); //[object Object] var box = (5 > 3) || 對象; //true var box = 對象1 || 對象2; //[object Object] var box = null || null; //null var box = NaN || NaN; //NaN var box = undefined || undefined; //undefined
- 如果兩邊的操作數有一個操作數不是布爾值的情況下,邏輯與運算就不一定返回布爾值,此時,遵循已下規則:
3.邏輯非(NOT):!
- 邏輯非運算符可以用於任何值。無論這個值是什麼數據類型,這個運算符都會返回一個布爾值。它的流程是:先將這個值轉換成布爾值,然後取反,規則如下:
- 1.操作數是一個對象,返回false;
- 2.操作數是一個空字符串,返回true;
- 3.操作數是一個非空字符串,返回false;
- 4.操作數是數值0,返回true;
- 5.操作數是任意非0數值(包括Infinity),false;
- 6.操作數是null,返回true;
- 7.操作數是NaN,返回true;
- 8.操作數是undefined,返回true;
var box = !(5 > 4); //false var box = !{}; //false var box = !''; //true var box = !'Lee'; //false var box = !0; //true var box = !8; //false var box = !null; //true var box = !NaN; //true var box = !undefined; //true
- 邏輯非運算符可以用於任何值。無論這個值是什麼數據類型,這個運算符都會返回一個布爾值。它的流程是:先將這個值轉換成布爾值,然後取反,規則如下:
六.*位運算符
- 位運算符有七種,分別是:位非NOT(~)、位與AND(&)、位或OR(|)、位異或XOR(^)、左移(<<)、有符號右移(>>)、無符號右移(>>>)
var box = ~25; //-26
var box = 25 & 3; //1
var box = 25 | 3; //27
var box = 25 << 3; //200
var box = 25 >> 2; //6
var box = 25 >>> 2; //6
七.賦值運算符
- 賦值運算符用等於號(=)表示,就是把右邊的值賦給左邊的變量。
var box = 100; //把100賦值給box變量
- 複合賦值運算符通過x=的形式表示,x表示算術運算符及位運算符
var box = 100;
box = box +100; //200,自己本身再加100
這種情況可以改寫爲:
var box = 100;
box += 100; //200,+=代替box+100
八.其他運算符
- 1.字符串運算符
- 字符串運算符只有一個,即:”+”。它的作用是將兩個字符串相加
- 規則:至少一個操作數是字符串即可
var box = '100' + '100'; //100100
var box = '100' + 100; //100100
var box = 100 + 100; //200
- 2.逗號運算符
- 逗號運算符可以在一條語句中執行多個操作。
var box = 100, age = 20, height = 178; //多個變量聲明
var box = (1,2,3,4,5); //5,變量聲明,將最後一個值賦給變量,不常用
var box = [1,2,3,4,5]; //[1,2,3,4,5],數組的字面量聲明
var box = { //[object Object],對象的字面量聲明
1 : 2,
3 : 4,
5 : 6
};
- 3.三元條件運算符
- 三元條件運算符其實就是後面將要學到的if語句的簡寫形式。
var box = 5 > 4 ? '對' : '錯'; //對,5>4返回true則把'對'賦值給box,反之。
九.運算符優先級
- 優先級遵循以下順序: