JS複習個人筆記

極速蝸牛發表於2018-03-01

運算子優先順序

一元運算子 > 算術運算子 > 比較運算子 > 邏輯運算子 > 三元運算子 > 賦值運算子 > 逗號運算子

console.log('hello'+(1<2)?'21':'12')  //21
[注意]邏輯取反運算子屬於一元運算子,其優先順序最高
複製程式碼

1、一元運算子

//一元加(+)運算子對數值無影響
var num = 25;
    num = +num;//25
//一元加(+)運算子對非數值呼叫Number()函式
var num1 = '01',num2 = 'false';
    num1 = +num1;//1 等同於num1 = Number(num1);
    num2 = +num2;//0
* +(new Date())會返回時間毫秒數
//一元減(-)運算子主要用於表示負數
var num = 25;
    num = -num;//-25
//對於非數值先呼叫Number()再轉換為負數

【注意】一元加和一元減運算子主要用於基本的算術運算,也可以用於轉換資料型別

複製程式碼
自增(++)自減(--)運算子
++num;等同於: num = num + 1;
【注意】
    1、自增自減前運算子通過Number()轉型函式將運算元轉換為數字,然後給數字加減1,並將加減1後的數值重新賦值給變數、數字元素或者物件屬性。
    2、++x並不總是和x = x+1完全一樣,++運算子從不進行字串連線操作,它總是會將運算元轉換為數字並增1

複製程式碼
#### 加法(+)
//單數值陣列和valueOf()返回值為數值的自定義物件會轉換為數值
console.log(1 + []);//1
var o = {
    valueOf: function(){
        return -1;
    }
}
console.log(1 + o);//0
如果進行算術加法運算,undefined轉換為NaN,null轉換為0,false轉換為0,true轉換為1
console.log(undefined + undefined);//NaN
console.log(null + null);//0
console.log(false + false);//0
console.log(true + true);//2
如果進行字串連線,undefined轉換為'undefined',null轉換為'null'false轉換為'false'true轉換為'true'
console.log('' + undefined);//'undefined'
console.log('' + null);//'null'
console.log('' + false);//'false'
console.log('' + true);//'true'

#### 減法(-)
Date函式在加法運算中通過toString()轉換而在減法中通過Number()函式轉換
undefined轉換為NaN,null轉換為0,false轉換為0,true轉換為1
console.log(1 - undefined);//NaN
console.log(1 - null);//1
console.log(1 - false);//1
console.log(1 - true);//0
複製程式碼

2、關係運算子

1、[注意]不論什麼進位制的數字,在進行關係比較時,最終都轉換為十進位制進行運算
console.log(10 === 0xa);//true
console.log(NaN === NaN);//false
console.log(+0 === -0);//true
2、物件的比較
javascript物件的比較是引用的比較,而不是值的比較。物件和其本身是相等的,但和其他任何物件都不相等。如果兩個不同的物件具有相同數量的屬性,相同的屬性名和值,它們依然是不相等的
console.log([] === []);//false
console.log({} === {});//false    
console.log(function(){} === function(){});//false

var a = {};
b = a;
console.log(a === b);//true
複製程式碼

3、三元運算子

定義:
variable = boolean_expression ? true_value : false_value;
本質上,這就是基於對boolean_expression求值的結果,決定給變數variable賦什麼值。如果求值結果是true,則給變數variable賦值true_value;如果求值結果是false,則給變數variable賦值false_value

典型應用場景,判斷一個變數是否有定義(並擁有一個有意義的真值),如果有定義則使用它,如果無定義則使用一個預設值:
greeting = 'hello ' + (username ? username : 'there');
等同於
greeting = 'hello ';
if(username)
    greeting += username;
else
    greeting += 'there';
    
* 三元運算子和if。。。else語句類似但是前者有有返回值
複製程式碼

相關文章