表達式是ECMAscript中的一個‘短語’,解釋器會通過計算把它轉化成一個值,最簡單的表達式是字面量或者變量名。
例如:5 //數字字面量
“xiongbao”//字符串字面量
{x1,y2}對象字面量,對象表達式
[1,2,3]數組字面量,數組表達式
funciton(N)(return x+y) 函數字面量,函數表達式
合并簡單表示創建復雜表示是
box+5 //加法運算符表達式
typeof(box)查看數據類型的表達式
box>8 邏輯運算表達式
var box = 100;
++box //box = box + 1 ;
box++ //box= box +1 ;
前置 運算先累加或者累減再賦值;
后置 先賦值再累加或者累減
var box = 100;
var age = box++ //box = 100+1 賦值給age
var age = ++box // age = box;然后box+1;
字符串類型
A: var box = “89”;
box++ // 對于數字字符串 有隱形的轉換功能,自動轉化成數字類型
B:var box = “ab”;
box++ // 字符串包含非數字值轉換為NaN
布爾類型
var box =false;
box++ //false轉換成數值是0,累加1 結果為1;
對象類型
var box = {
toString:function(){ return}
};
box++ //結果為1 不執行toString()或者value() 方法為NaN
1.用于類型轉換
2.用于算術運算
3.加法用于取整,減法用于取負。
var box = 1;
-box ;
+box;
ECMAscript定義了五個算術運算符,加(+)減(-)乘(*)除(/)求模(取余)。
如果在算術運算的值不少數值,那么后臺會自動調用number()函數將其轉化成數值。
a如果都是數值
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 正無窮和負無窮為非負數
var box = +0 加 +0 ; // 結果為+0
var box = -0 加 -0 ; // 結果為-0
var box = +0 加 -0 ; // 結果為+0
b如果一個操作數是字符串
b1: 如果兩個數都是字符串,則講兩個字符串拼接起來
var box = a + b ; // 結果是ab
b2:如果只有一個是字符串,則將不是的字符串變成字符串,再拼接起來
var box = 7 + “9”; // 結果是79
c 如果操作數 是對象和布爾值
調用他們的toString()獲得相應的字符串值,再利用相關的字符串值
D 如果是undefined 和 null
則調用string()函數并取得字符串“undefined”和“null”。
a如果都是數值
var box = 1+2; //結果為3 如果兩個操作符都是數值,則執行常規的算術減法操作并返回結果。
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 = +0 減+0 ; // 結果為+0
var box = +0 減 -0 ; // 結果為-0
var box = -0 加 -0 ; // 結果為+0
b如果一個操作數是字符串,布爾值,Null或者undefined
先在后臺調用number()函數將其轉化為數值,然后再根據前面規則執行減法計算。如果轉換的結果是NaN,則減法的結果就是NaN。
c 如果一個操作數是對象
則調用對象的valueOf()方法以取得該對象的數值。
如果得到的結果是NaN,則減法的結果就是NaN。
如果對象沒有valueOf()方法,則調用toString()方法并將得到的字符串轉化為數值。
var box = 10*70; //結果為700
var box = 1*NaN //結果為NaN 如果一個操作符是NaN 就為NaN
var box = Infinity * Infinity //結果為 Infinify
var box = -Infinity*- Infinity //結果為Infinify
var box = Infinity * -Infinity // 結果為-Infinity
var box = 10*true; // 結果為100,true轉成數值為1
var box = 10* “ ”; // 結果為0 “ ”轉成了0
var box = 10*null; // 結果為0 null轉成了0
var box = 10*“lee”; // 結果為NaN lee轉成了NaN
var box = 10* 對象; // 結果為NaN
小結
a如果操作數都是數值,執行常規的乘法計算,倆個正數或者兩個負數相乘結果為正數,如果有一個操作符有符合,結果為負數。如果超過ECMAScript的數值范圍,則返回Infinity或者-Infinity。
b如果一個操作符是NaN結果就是NaN
c 如果是Infinity與0相乘,則結果是NaN;
d 如果是Infinity與非0相乘,則結果是Infinity或者-Infinity,取決于符號操作數的符合。
e 如果Infinity * Infinity,結果是Infinity。
f 如果一個操作數不是數值,則在后臺調用Number() 將其轉換為數值,在應用上面的規則
var box = 10/7; //結果為1.42
var box = 1/NaN //結果為NaN 如果一個操作符是NaN 就為NaN
var box = Infinity / Infinity //結果為 NaN
var box = -Infinity/- Infinity //結果為NaN
var box = Infinity /-Infinity // 結果為NaN
var box = 10/true; // 結果為100,true轉成數值為1
var box = 10/ “ ”; // 結果為Infinity
var box = 10/null; // 結果為Infinity
var box = 10/“lee”; // 結果為NaN lee轉成了NaN
var box = 10/ 對象; // 結果為NaN
小結
a如果操作數都是數值,執行常規的除法計算,倆個正數或者兩個負數相除結果為正數,如果有一個操作符有符合,結果為負數。如果超過ECMAScript的數值范圍,則返回Infinity或者-Infinity。
b如果一個操作符是NaN結果就是NaN
c 如果是Infinity被Infinity除,則結果是NaN
d 如果是零被零除,則結果是NaN
e如果是非零的有限數被零除,則結果是Infinity或者-Infinity,取決于符號操作數的符合
f如果是Infinity被任何非零數值除,則結果是Infinity或者-Infinity,取決于符號操作數的符合
f 如果Infinity * Infinity,結果是Infinity
d 如果一個操作數不是數值,則在后臺調用Number() 將其轉換為數值,在應用上面的規則
var box = 10%3; //結果為1
var box = 1%NaN //結果為NaN
var box = Infinity %Infinity //結果為 NaN
var box = -Infinity%- Infinity //結果為NaN
var box = Infinity%-Infinity // 結果為NaN
var box = 10%true; // 結果為0
var box = 10%“ ”; // 結果為Nan
var box = 10%null; // 結果為NaN
var box = 10%“lee”; // 結果為NaN
var box = 10%對象; // 結果為NaN
小結
a如果操作數都是數值,執行常規的除法計算,返回除得的余數
b如果被除數是無窮大值而除數是有限值,結果就是NaN
c 如果被除數是有限大的數值而除數是0,則結果是NaN
d 如果Infinity被Infinity除,則結果是NaN
e如果被除數是有限大的數值而除數是無窮大的數值,則結果是被除數
f如果被除數是零,則結果是零
d 如果一個操作數不是數值,則在后臺調用Number() 將其轉換為數值,在應用上面的規則
var box = 3 < 2 ; // 關系運算符大多返回一個布爾值
var box = “3” >22; // 字符串會被轉化成數值,再比較
var box = “3” >“22”; // 如果兩個都是字符串,會對第一個字符進行比較,3>2
var box = 對象 ; //false;
var box = 2 > {
toString:funtion(){
return 1;
}
}
var box = "a">"b"; //97 >98 字符編碼進行比較
var box = "a">"B"; //97 >66 字符編碼進行比較
總結:
1.倆個操作數都是數值,則數值比較
2.兩個操作數都是字符串,則比較兩個字符串對應的字符編碼值
3.如果一個操作數是數值,則將另外一個操作數轉化為數值,然后進行數值比較
4.如果一個操作數是布爾值,則先將其轉化成數值,然后再執行比較
5如果一個操作數是對象,則先調用valueof()方法或toString()方法,再用結果比較
var box = 2 == 1; //true
var box = “2” == 2; //true “2”會轉成數值2
var box = false==0; //true false轉成數值就是0;
var box =“a” == “A”; //false 轉換后的編碼不一樣
var box = 2 =={} ; // false 執行toString()或 ValueOf()會改變
var box = 2 ==NaN; //false , 只要有NaN,都是false
var box = { } == {} // false 比較的是他們的地址,每個新建對象的引用地址都不同
var age = { };
var height = age;
var box = age ==height; // true,應用地址一樣,所以相等
var box = “2”===2; // false 值和類型都必須相等
var box = 2!==2; // false 值和類型都相等了
總結
1.如果一個操作數是布爾值,則先將其轉換成數值,true是1,false是0
2.如果一個操作數是字符串,則將其轉成數值再比較
3.如果一個操作數的對象,則先調用valueOf()或toString()方法再返回值比較
4.不轉換的情況下,null等于undefined
5.如果有一個操作符是NaN,則相等操作符返回false,不相等操作符返回true;NaN不等于NaN
6.如果兩個操作數都是對象,則比較透明是否是同一個對象,如果都指向同一個對象,怎返回true,否則返回false
7.在全等和不全等的比較中,值和類型都相等,才返回true,否則返回false。換句話,在操作數不轉換的情況下相等才是全等。
邏輯操作符:非(not)、與(and)、或(or)。
邏輯非由一個嘆號(?。┍硎?,應用于任何類型。這個操作符有轉換功能,把操作數轉換成布爾值,然后再對其求反。返回結果只有真true和假false。
例子
alert(!false) ; //true
alert(!“blue”); //false
alert(!0); //true
alert(!NaN); //true
alert(!“”); //true
alert(!12345); //false
總結:
1.如果操作數是一個對象,返回false
2.如果操作數是一個非空字符串,返回false
3.如果操作數是任何非0數值(包括Infinity),返回false
4.如果操作數是一個空字符串,返回true
5.如果操作數是數值0,返回true
6.如果操作數是數值null,返回true
7.如果操作數是數值NaN,返回true
8.如果操作數是數值undefined,返回true
邏輯與操作符(&&)表示。邏輯與操作符,屬于短路操作,如果第一個操作能夠決定結果,那么就不會再對第二個操作數求值。如果第一個操作數是false,那么第二個值無論是什么,結果都是false。
var result = true && false
x == 0 && y == 0 //只有x和y都為0,才會返回true.
邏輯與操作適應任何類型的操作數,不僅是布爾操作。
規則如下
1.如果第一個操作數是對象,責返回第二個操作數
3.如果第二個操作數是對象,則只有在第一個數的數值結果為true的情況下才會返回該對象
4.如果倆個操作數都是對象,則返回第二個操作數
5.如果第一個操作數是null,則返回null
6.如果第一個操作數是NaN,則返回NaN
7.如果第一個操作數是undefined,則返回undefined
注意:不能在邏輯與操作中實用未定義的值,會報錯
邏輯或操作符由(||)表示。邏輯或操作符也是短路操作符,如果第一個操作數的求值結果為true,就不會對第二個操作數求值了,倆個操作數都為false,才會返回false.
如果有一個操作數不是布爾值,邏輯或不一定返回布爾值。
規則如下:
1.如果第一個數是對象,則返回第一個操作數
2.如果第一個操作數的求值結果為false,則返回第二個操作數
3.如果兩個操作數都是對象,則返回第一個操作數
4.如果倆個操作數都是null,則返回null
5.如果倆個操作數都是NaN,則返回NaN
6.如果倆個操作數都是undefined,則返回undefined
javaScript唯一一個三元運算符,寫成“?:”。
例如:x > 0 ? x : -x //求x的絕對值
解釋:如果x大于0,返回x;如果x小于0,則返回-x。
var max = (num1 > num2) ? num1:num2
簡單的復制操作符(=)
復合賦值操作符
num += 10和 num = num+10一樣
乘賦值(*=)
除賦值(/=)
加賦值(+=)
減賦值(-=)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。