运算符优先级
一元运算符 > 算术运算符 > 比较运算符 > 逻辑运算符 > 三元运算符 > 赋值运算符 > 逗号运算符
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语句类似但是前者有有返回值