运算符优先级:括号>普通运算>赋值
'+' 运算符
任何数据类型的值 与 字符串进行相加运算都会变成字符串拼接
console.log(1 + 1 + 'a'); //'2a'
console.log('a'+ 1 + 1 ); //'a11'
console.log(1 + 1 + 'a' + (1 + 1)); //'2a2'
//如果是数组与字符串进行相加
console.log([] + 'a'); //'a'
console.log([].toString()); //''
console.log([1, 2] + 'a'); //1,2a;
console.log([1, 2].toString()); //'1,2'
//由此可见数组与字符串进行相加操作时,数组会调用toString方法转换成字符串之后再进行字符串拼接
//所以当字符串和数组或对象进行加法运算的时候,会调用相应的toString方法或者valueOf方法将对应的数组、对象转换成字符串后在进行字符串拼接。
数字之间相加就是数学逻辑的加。
console.log(1 + NaN); //NaN(Not a Number);
console.log(Infinity + -Infinity); //NaN
console.log(Infinity + Infinity); //Infinity
console.log(-Infinity + -Infinity); //-Infinity
++/-- 自增自减运算符
自增自减运算符分成先自增(自减)后运算以及先运算后自增(自减)。
var a = 1;
console.log(a++); //1;
console.log(a); //2;
var b = 1;
console.log(++b); //2;
console.log(b); //2;
'-' 运算符(常常伴随着隐式类型转换)
console.log(1 - 1); //0;
console.log(1 - NaN); //NaN;
console.log(Infinity - Infinity); //NaN
console.log(Infinity - -Infinity); //Infinity
console.log(-Infinity - -Infinity); //NaN
console.log(-Infinity - Infinity); //-Infinity
console.log(100 - true); //99;
console.log(100 - ''); //100;
需要注意的是:
console.log(100 - true); //99;
console.log(100 - 'true'); //NaN;由于Number('true')的结果是NaN造成的
'/' 运算符
对于'/'运算符来说,值得注意的有两个点:
console.log(1/0); // Infinity;
console.log(-1/0); // -Infinity;
console.log(0/0); // NaN;
比较运算符
* 数字类型的进行比较就是正常的比较大小
* 数字类型与字符串类型进行比较会将字符串转成数字类型之后再进行比较
* 字符串类型之间互相比较,比较的方式是从左到右逐位比较ASICII码值
* "=="运算符是不看数据的类型的,"==="运算符比较的不仅仅是值相等,连数据的数据类型也需要相等才行。
* NaN和包括自己在内的任何数据都不想等。
逻辑运算符
undefined、null、""(空字符串)、0、NaN为假,其他的全为真。
&& 运算符
从左到右,遇到假就返回假,如果直到最后一个判断条件之前仍旧全为真,那么直接返回最后一个判断条件。
- 1 && 1 返回1 if(1)=>true
- 1 && 0 返回0 if(0)=>false
- 0 && 1 返回0 if(0)=>false
- 0 && 0 返回0 if(0)=>false
逻辑与运算在某些场景下有些地方需要关注:
var a = 1,
b = 2;
if(a==2&&++b==3){
console.log('通过');
}
console.log(a,b); //1,2
逻辑与在判断条件为false的情况下会直接返回false,不会再去看false之后的判断语句,所以如果在这些判断语句中有需要进行的操作时会被忽略
|| 运算符
从左到右,遇到条件为真就直接返回true,如果一直到最后一个判断条件之前都为false那么直接返回最后一个判断条件。
同样的逻辑或也会产生短路现象,如果出现判断条件为真的,并且该条件不是最后一个的话,后续的所有操作也会被忽略,所以在写程序的时候要尽量避免这种情况发生。
! 运算符
取反操作
对于上面提到为假的,进行取反操作之后都会返回true,同样的,对为真的值进行取反,得到的会是false。
!"undefined"; //false
!undefined; //true
对于字符串的值进行取反运算,除非是空字符串,其他全为真(取反之后为false)。
end!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。