只能操作一个值的操作符叫做 一元操作符
1.递增和递减操作符
前置型
var age = 21;
++age; // 相当于 age = age + 1;
--age; // 相当于 age = age -1;
由于前置递增和递减操作于执行语句的优先级相等,因此整个语句会从左到右被求值。接下来再看一个例子:
var age1 = 2;
var age2 = 20;
var age3 = --age1 + age2;// 等于21
var age4 = age1 + age2; // 等于21
age3之所以等于21是因为age3 = age3 - 1 这步操作才与age2相加的。而变量age4也等于21是因为相应的加法操作使用了age1减去1之后的值。
后置型
var age = 20;
age++; // 21
把递增语句放在变量的后面并不会改变语句的结果,因为递增是这条语句的唯一操作,但是当语句包含其他操作时,区别就非常明显了。例子:
var age1 = 2;
var age2 = 20;
var age3 = age1-- + age2;// 22
var age4 = age1 + age2; //21
这里可以看到只是将前置递增改成后置递减,就可以立即看到差别。
在前面这个例子中age3和age4都是21,而这个例子中age3为22,age4为21。
原因在于:这里再计算age3时使用了age1的原始值来完成加法计算,而age4则使用了递减之后的值。
应用场景
不管递增还是递减在任何场景都可适用,也就是说它们不仅仅可以适用于整数,还可以用于字符串,布尔值,浮点数值和对象。
1. 在应用在一个包含有效数字字符的字符串中,先将其转换成为数字值,在执行+1的操作,字符串变量变成数值变量。
2. 在应用于一个不包含有效数字的字符串时,将变量的值设置为NaN。
3. 在应用于布尔值false时,先将其转换为0,true则为1,在执行+1的操作。
4. 在应用于浮点数值时,直接执行+1操作
5. 在应用于对象时,会调用该对象的valueOf()方法,取得一个可操作的值,然后对值应用于以上规则,如果结果是NaN,则在调用toString()方法在应用上述规则。
例如:
var two = "2";
var three = "w";
var bool = false;
var f = 1.1;
var obj = {
valueOf: function(){
return -1;
}
}
two++; //3
three++; //NaN
bool++; //1
f++; //1.1
obj++; //-1
一元加减操作符
一个一元加操作符以一个加号(+)表示,放在数值前面,对数值不会产生任何影响。
var age = 21;
+age;//21
但是,在对非数值应用一元加操作符时,该操作会像Number()转型函数一样对这个值执行转换。布尔值false和true将被转换为0和1,而对象是先调用valueOf方法或者toString方法,再转换得到的值。
var two = "2";
var three = "w";
var bool = false;
var f = 1.1;
var obj = {
valueOf: function(){
return -1;
}
}
+two; //2
+three; //NaN
+bool; //0
+f; //1.1
obj++; //-1
一元减操作符主要用于表示负数。
var age = 21;
-age; //-21
在将一元减操作符应用于数值时,该值会变成负数,如果应用到非数值时,一元减操作符遵循一元加操作符相同的规则,最后再将得到的数值转换为负数。
var two = "02";
var three = "w";
var bool = false;
var f = 1.1;
var obj = {
valueOf: function(){
return -1;
}
}
+two; //-2
+three; //NaN
+bool; //0
+f; //-1.1
obj++; //1
网友评论