1.递增与递减操作符
- 前置递增和递减操作时,变量的值都是在语句被求值之前改变的
var a = 29;
var b = --a + 2;
console.log(a); //28;执行了--a
console.log(b); //30;先执行--a(得到28)再执行+2(得到30)
- 后置递增和递减操作是在包含他们的语句被求值之后才执行
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2;
var num4 = num1 + num2;
console.log(num3); //22;先执行num1 + num2(得到22),再执行num1--(得到num1=1)
console.log(num4); //21
2.一元加减操作符
var num = 20;
num = +num; //20;一个+放在数值前对数值不产生任何影响
console.log(+new Date()); //1477485251541;先调用时间对象的valueOf()方法
console.log(+"4"); //4;字符串解析
console.log(+"s"); //NaN;字符串解析
console.log(+false); //0;false被转换为0
console.log(+true); //1;true被转换为1
3.布尔操作符
- 逻辑非操作符也可以用于将一个值转换为其对应的布尔值;同时使用两个逻辑非操作符,第一个非操作符返回一个布尔值,第二个非操作符对该布尔值求反,于是就得到了这个值真正对应的布尔值
console.log(!!true); //true
console.log(!!0); //false
console.log(!!9); //true
console.log(!!"sun"); //true
console.log(!!null); //false
console.log(!!undefined); //false
console.log(!!NaN); //false
4.加法操作符操作字符串
- 两个操作数都是字符串,则自然拼接
- 只有一个操作数是字符串,则将另一个操作数转换为字符串,再自然拼接
console.log(1+1); //2;正常计算
console.log("2"+"4"); //24;字符串拼接
console.log(2+"4"); //24;字符串拼接
console.log( (5 + 5) + "0" ); //100;先对()里的数值计算,再拼接
5.相等操作符
- 相等(==)和不相等(!=),先转换再比较
- 全等(===)和不全等(!==),仅比较不转换
console.log( 55 == "55" ); //true;先将字符串转为数值再比较
console.log( 55 === "55" ); //false;不转换,数据类型不同,因此不相等
- 比较相等性之前,不能将
null
和undefined
转换成其他任何值
console.log( null == undefined ); //true;类似的值
console.log( null === undefined ) //false;不同类型
6.操作符优先级
typeof 2*3; //NaN
typeof (2*3); //"number"
typeof 2+3; // "number3"
- ++、--是右结合的操作符(优先级最高的几个都是右结合),而且比加减乘除优先级高;同时自增、自减运算符的运算数得是可以放在赋值符号左边的值,所以不能是常数
4++; //ReferenceError: Invalid left-hand side expression in postfix operation(提示左侧是无效的表达式)
var a=0,b=0;
console.log( a+++b ); //0
console.log(a); //1;++优先级比+高,所以相当于(a++)+b
console.log(b); //0