0
点赞
收藏
分享

微信扫一扫

第 2 章 基本概念------------(4)

2.5操作符

         ECMA-262描述了一组用于操作数据值的操作符,包括算术操作符(如加号和减号)、位操作符、关系操作符和相等操作符。ECMAScript操作符的与众不同在于,它能够适用于很多值,例如字符串、数字值、布尔值,甚至对象。在应用于对象时,相应的操作符通常都会调用对象的valueOf()和toString()方法,以便取得可以操作的值。

2.5.1一元操作符

只能操作一个值的操作符叫作一元操作符。一元操作符是ECMAScript中最简单的操作符。

2.5.1.1 递增和递减操作符

         递增和递减操作符有两个版本:前置型和后置型。前置型位于操作变量之前,而后置位于操作变量之后。因此,在使用前置递增操作符给一个数值加1时,要把两个加号(++)放在这个数值变量前面。执行前置递减操作和前置递增类似。在执行前置递增和递减时,变量的值都是在语句被求值以前改变的。(在计算机科学领域,这种情况通常被称作副效应),例子如下:     

var age=29;
++age;
var price=30;
--price;
var antherAge=++age+2
var antherPrice=--price+3;
alert(age); //输出31
alert(antherAge); //输出33
alert(price); //输出28
alert(antherPrice); //输出31

       后置型递增和递减操作符的语法不变,只不过要放在变量的后面而不是前面。后置递增和递减与前置递增和递减有一个非常重要的区别,即递增和递减操作是在包含它们的语句被请求之后才执行。例子如下:       

var age=29;
age++;
var price=30;
price--;
var antherAge=age++ +2
var antherPrice=price-- +3;
alert(age); //输出31
alert(antherAge); //输出32
alert(price); //输出28
alert(antherPrice); //输出32

       所有这4个操作符对任何值都使用,也就是它们不仅仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。在应用于不同的值时,递增和递减操作符遵循以下规则:

1.  在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作。字符串变量变成数值变量。

2.  在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN。字符串变量变成数值变量。

3.  在应用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变量变成数值变量。

4.  在应用于布尔值true时,先将其转换为1再执行加减1的操作。布尔值变量变成数值变量。

5.  在应用于浮点数值时,执行加减1的操作。

6. 在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值。然后对该值应用前述规则。如果结果是NaN,则调用toString()方法后再应用前述规则。对象变量变成数值变量。

         以下示例展示了上面的一些规则:           

var s1 ="2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1++; //值变成数值3
s2++; //值变成NaN
b++; //值变成数值1
f--; // 值变成0.10000000000000009(由于浮点舍入错误所致)
o--; //值变成数值-2

2.5.1.2 一元加和减操作符

         一元加操作符以一个加号(+)表示,放在数值前面,对数值不会产生任何影响。不过,在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。换句话说,布尔值false和true将被换为0和1,字符串值会被按照一组特殊的规则进行解析,而对象是先调用它们的valueOf()和toString()方法,再转换得到的值。

         以下展示对不同数据类型应用一元加操作符的结果:         


var s1 ="01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1 = +s1; // 值变成数值1
s2 = +s2; // 值变成数值1.1
s3 = +s3; // 值变成NaN
b = +b; //值变成数值0
f = +f; //值未变,仍然是1.1
o = +o; //值变成数值-1

         在将一元减操作符应用于数值时,该值会变成负数。而当应用于非数值时,一元减操作符遵循与一元加操作符相同的规则,最后再将得到的数值转换为负数,如下面所示:


var s1 ="01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1 = -s1; // 值变成了数值-1
s2 = -s2; // 值变成了数值-1.1
s3 = -s3; // 值变成了NaN
b = -b; //值变成了数值0
f = -f; //变成了-1.1
o = -o; //值变成了数值1


举报

相关推荐

0 条评论