ECMA-262 描述了一组用于操作数据值的操作符,包括算术操作符(如加减)、位操作符、关系操作符、相等操作符。ECMAScript操作符能够适用于很多值,例如字符串、数字值、布尔值甚至对象。不过在应用于对象时,相应的操作符通常会调用对象的valueOf() toString()方法,以便取得可操作的值。
1. 一元操作符
只能操作一个值的操作符叫做一元操作符。
- 递增和递减操作符
- 前置型
//1. 前置递增操作 var age = 29; alert(++age); //30 /* * 在这个例子中,前置递增操作符把age的值变成了30, * 实际上,执行这个前置递增操作与执行以下操作的效果相同 */ var age = 29; age = age + 1; //2. 前置递减操作 var age = 29; alert(--age); //28 /* * 在这个例子中,前置递减操作符把age的值变成了28, * 实际上,执行这个前置递减操作与执行以下操作的效果相同 */ var age = 29; age = age - 1;
执行前置递增和递减操作符时,变量的值都是在语句被求值以前改变的。
//前置递增和递减操作 与执行语句的优先级相等,因此整个语句从左至右被求值 var age = 29; var anotherAge = --age +2; alert(age); //28 alert(anotherAge);//30 var num1 = 2; var num2 = 20; var num3 = --num1 + num2; var num4 = num1 + num2; alert(num3); //21 alert(num4); //21
- 后置型:递增和递减操作是在包含他们的语句被求值之后执行的
var age = 29; alert(age++); //29 /* * 把递增操作符放在变量后面并不会改变语句的结果,因为递增是这条语句的唯一操作 * 但当语句中还包含其他操作符时,上述区别就会非常明显了 */ var num1 = 2; var num2 = 20; var num3 = num1-- + num2; var num4 = num1 + num2; alert(num3); //22 alert(num4); //21
这四个操作符不仅适用于整数,还可以用于字符串、布尔值、浮点数和对象。在应用于不同值时,递增和递减操作符遵循下列规则。
//1. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字,在执行加减1的操作,字符串变量变成数值变量 var str1 = "123"; alert(++str1); //124 var str2 = "0xa"; alert(++str2); //11 可以识别十六进制数 var str3 = "070"; alert(++str3); //71 //2.在应用于一个不包含有效数字字符的字符串时,将变量值设置为NaN。字符串变量变成数值变量 var str1 = "123ab"; alert(++str1); //NaN var str2 = "ab123"; alert(++str2); //NaN var str3 = "chen"; alert(++str3); //NaN //3.在应用于Boolean时,false转换成0,true转换成1,在执行加减1操作。布尔变量变成数值变量 var b1 = false; alert(++b1); //1 var b2 = true; alert(++b2); //2 //4.在应用于浮点数值时,执行加减1操作 var f = 1.1; alert(--f); //0.10000000000000009(由于浮点舍入错误所致) /* *5.在应用于对象时,先调用对象的valueOf()方法,以取得一个可供操作的值, * 然后对改值应用前述规则。 * 如果结果是NaN,则调用toString()方法后再应用前述规则。 * */ var o = { valueOf: function(){ return -1; } }; alert(--o); //-2 alert(typeof o);//number
- 前置型
- 一元加和减操作符
- 一元加操作符以一个加号(+)表示,放在数值的前面,对数值不会产生任何影响。在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。
var num = 25; num = +num; alert(num); //25 var s1 = "01"; alert(+s1); //1 值变成数值1 alert(typeof s1);//string alert(typeof +s1);//number var s2 = "1.1"; alert(+s2); //值变成数值1.1 var s3 = "z"; alert(+s3); //值变成NaN var b = false; alert(+b); //值变成数值0 var f = 1.1; alert(+f); // 1.1 值未变 var o = { valueOf: function(){ return -1; } } alert(+o); //值变成数值-1
- 一元减操作符主要用于表示负数。在用于非数值时,遵循与一元加操作符相同的规则。
var num = 22; num = -num; alert(num); //-22 var s1 = "01"; alert(-s1); //值变成了数值-1 var s2 = "1.1"; alert(-s2); //值变成了数值-1.1 var s3 = "cc"; alert(-s3); //值变成了NaN var f = 1.1; alert(-f); //变成了-1.1 var b = true; alert(-b) //值变成了-1 var o ={ valueOf: function(){ return -1; } } alert(-o);//值变成了数值1
- 一元加操作符以一个加号(+)表示,放在数值的前面,对数值不会产生任何影响。在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。