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); //28alert(anotherAge);//30var num1 = 2;var num2 = 20;var num3 = --num1 + num2;var num4 = num1 + num2;alert(num3); //21alert(num4); //21
- 后置型:递增和递减操作是在包含他们的语句被求值之后执行的
var age = 29;alert(age++); //29/* * 把递增操作符放在变量后面并不会改变语句的结果,因为递增是这条语句的唯一操作 * 但当语句中还包含其他操作符时,上述区别就会非常明显了 */var num1 = 2;var num2 = 20;var num3 = num1-- + num2;var num4 = num1 + num2;alert(num3); //22alert(num4); //21
这四个操作符不仅适用于整数,还可以用于字符串、布尔值、浮点数和对象。在应用于不同值时,递增和递减操作符遵循下列规则。
//1. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字,在执行加减1的操作,字符串变量变成数值变量var str1 = "123";alert(++str1); //124var str2 = "0xa"; alert(++str2); //11 可以识别十六进制数var str3 = "070";alert(++str3); //71//2.在应用于一个不包含有效数字字符的字符串时,将变量值设置为NaN。字符串变量变成数值变量var str1 = "123ab";alert(++str1); //NaNvar str2 = "ab123";alert(++str2); //NaNvar str3 = "chen";alert(++str3); //NaN//3.在应用于Boolean时,false转换成0,true转换成1,在执行加减1操作。布尔变量变成数值变量var b1 = false;alert(++b1); //1var 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); //-2alert(typeof o);//number
- 前置型
- 一元加和减操作符
- 一元加操作符以一个加号(+)表示,放在数值的前面,对数值不会产生任何影响。在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。
var num = 25;num = +num;alert(num); //25var s1 = "01";alert(+s1); //1 值变成数值1alert(typeof s1);//stringalert(typeof +s1);//numbervar s2 = "1.1";alert(+s2); //值变成数值1.1var s3 = "z";alert(+s3); //值变成NaNvar b = false;alert(+b); //值变成数值0var f = 1.1;alert(+f); // 1.1 值未变var o = { valueOf: function(){ return -1; }}alert(+o); //值变成数值-1
- 一元减操作符主要用于表示负数。在用于非数值时,遵循与一元加操作符相同的规则。
var num = 22;num = -num;alert(num); //-22var s1 = "01";alert(-s1); //值变成了数值-1var s2 = "1.1";alert(-s2); //值变成了数值-1.1var s3 = "cc";alert(-s3); //值变成了NaNvar f = 1.1;alert(-f); //变成了-1.1var b = true;alert(-b) //值变成了-1var o ={ valueOf: function(){ return -1; }}alert(-o);//值变成了数值1
- 一元加操作符以一个加号(+)表示,放在数值的前面,对数值不会产生任何影响。在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。