运算符
一 表达式
字面量或变量及其他复杂表达式。
二 一元运算符
只能操作一个值的运算符。
1 递增++和递减--
2 前置与后置的区别:
var a=1;
var b=1;
var c=a++;
var d=++b;
console.log(a); //2
console.log(c); //1
console.log(b); //2
console.log(d); //2
3 其它类型应用一元运算符的规则:
var a='10';
console.log(a++);//10
var b='ab';
console.log(b++);//NaN 字符串包括非数值转化为NaN
var c=false;
console.log(c++);//0
var d=1.2;
console.log(d++);//1.2
var e={
toString:function(){
return 1;
}
}
console.log(e++);//1 不设置toString或valueOf即为NaN
4 加和减运算符
var a='1';
console.log(a++); //1
var b=1;
console.log(b++); //1
var c='ab';
console.log(c++); //NaN
var d=1.2;
console.log(+d); //1.2
var e={
toString:function(){
return 1;
}
}
console.log(+e); //1
三 算术运算符
1 加法与减法:
console.log(1+2); //3
console.log(1+NaN); //NaN
console.log(Infinity+Infinity); //Infinity
console.log(Infinity+-Infinity); //NaN
console.log(-Infinity+-Infinity);//-Infinity
console.log('年龄'+1+2); //年龄12
console.log(1+2+'年龄'); //3年龄
console.log(1+[1,2]); //11,2
console.log(1+new Object()) //1[object object]
console.log(1+''); //1 ''转化为0
console.log(1+false); //1 false转化为0
console.log(1+'10'); //110 +是字符串连接符
console.log(1-'10') //-9
console.log(1+null); //1 null转化为0
2 乘法和除法:
console.log(1*2); //2
console.log(1*NaN); //NaN
console.log(Infinity*Infinity); //Infinity
console.log(-Infinity*Infinity); //-Infinity
console.log(-Infinity*-Infinity); //Infinity
console.log(1*true); //1
console.log(1*''); //0
console.log(1*null); //0
console.log(1*'abc'); //NaN
console.log(1*[1,2,3]); //NaN
console.log(1*new Object()) //NaN
3 求模console.log(10%3); //1
console.log(10%NaN); //NaN
console.log(Infinity%Infinity); //NaN
console.log(-Infinity%Infinity);//NaN
console.log(-Infinity%-Infinity);//NaN
console.log(10%true); //0
console.log(10%null); //NaN
console.log(10%''); //NaN
console.log(10%'abc'); //NaN
console.log(10%new Object()) //NaN
console.log(10%0) //NaN
任何与NaN的运算都等于NaN四 关系运算符
用于进行比较的运算符
比较规则:
1 两个操作数都是数值,则数值比较;
2 两个操作数都是字符串,比较两个字符串对应的字符编码值;
3 两个操作数只有一个是数值,则将另一个转化为数值,在进行数值比较;
4 两个操作数有一个是对象,则先调用valueOf()方法或toString()方法,在用结果比较。
判断相等与不等
1 null和undefined是相等的,但不恒等;
2 NaN== 返回false;NaN!== 返回true;
3 null既不等于true也不等于false;
4 若两个对象指向同一个对象则返回true;否则返回false;比较引用地址;
5 值和类型都相等时返回true。
五 逻辑运算符
逻辑与(AND),逻辑或(OR),逻辑非(NOT).
逻辑与&&:两边都为true返回true;
如果两边有一个不是布尔值:
1 第一个是对象,返回第二个数;
2 第二个是对象,若第一个返回true,才返回第二个数,否则返回false;
3 有一个是null,返回null;
4 有一个是undefind,返回undefined.
逻辑或(OR)||:
只要有true就返回true;
有一个不是布尔值:
1 第一个是对象,返回第一个数;
2 两个数都是对象返回第一个数;
3 两个数都是null,返回null;
4 两个数都是NaN,返回NaN;
5 两个数都是undefined返回undefined
逻辑非(NOT)
将值转化为布尔值,然后取反.
1 操作数是一个对象,返回false;
2 操作数是一个空字符串;
3 操作数是一个非空字符串;
4 操作数是0,返回true;
5 操作数是非0,返回false;
6 操作数是null,返回true;
7 操作数是NaN,返回true;
8 操作数是undefined,返回true。
六 位运算符 略
七 赋值运算符
var a=1;
a+=1 //a=a+1;
八 其它运算符
1 字符串连接符 +
规则:至少一个操作数是字符串。
2 逗号运算符
可以在一条语句里执行多个操作
3 三元操作符
var a=3;
var b=a>5?5:a>4?4:a>3?3:a>2?2:a>1?1:0 //判断a是否大于5 是返回5,不是判断a是否大于4是返回4,不是判断a是否大于3...
console.log(b) //2
九 运算符优先级
从上到下优先级从高到低
运算符 | 描述 |
. [] () | 对象成员存取、数组下标、函数调用等 |
++ -- ~ ! delete new typeof void | 一元运算符 |
* / % | 乘法、除法、去模 |
+ - + | 加法、减法、字符串连接 |
<< >> >>> | 移位 |
< <= > >= instanceof | 关系比较、检测类实例 |
== != === !== | 恒等(全等) |
& | 位与 |
^ | 位异或 |
| | 位或 |