首页 > 代码库 > 运算符_表达式,一元运算符,算术运算符
运算符_表达式,一元运算符,算术运算符
ECMA-262 描述了一组用于操作数据值的运算符,包括一元运算符、布尔运算符、算术运算符、关系运算符、三元运算符、位运算符及赋值运算符。ECMAScript 中的运算符适用于很多值,包括字符串、数值、布尔值、对象等。不过,通过上一章我们也了解到,应用于对象时通常会调用对象的 valueOf()和 toString()方法,以便取得相应的值。(PS:前面的章节我们讲过 typeof 操作符、new 操作符,也可以称之为 typeof 运算符、new 运算符,是同一个意思。)
一.表达式:
表达式是 ECMAScript 中的一个"短语",解释器会通过计算把它转换成一个值。最简单的表达式是字面量或者变量名。例如:
5.96 //数值字面量
‘Lee‘ //字符串字面量
true //布尔值字面量
null //空值字面量
/Java/ //正则表达式字面量
{x:1, y:2} //对象字面量、对象表达式
[1,2,3] //数组字面量、数组表达式
function(n) {return x+y;} //函数字面量、函数表达式
box //变量
当然,还可以通过合并简单的表达式来创建复杂的表达式。比如:
box + 5.96 //加法运算的表达式
typeof(box) //查看数据类型的表达式
box > 8 //逻辑运算表达式
通过上面的叙述,我们得知,单一的字面量和组合字面量的运算符都可称为表达式。
二.一元运算符:只能操作一个值的运算符叫做一元运算符。
1.递增++和递减--
var box = 100;
++box; //前置递增,把 box 累加一个 1,相当于 box = box+1
--box; //前置递减,把 box 累减一个 1,相当于 box = box-1
box++; //后置递增,同上
box--; //后置递减,同上
前置和后置的区别:在没有赋值操作,前置和后置是一样的。但在赋值操作时,如果递增或递减运算符前置,那么前置的运算符会先累加或累减再赋值,如果是后置运算符则先赋值再累加或累减。
var box = 100;
var age = ++box; //age 值为 101
var height = box++; //height 值为 100
2.其他类型应用一元运算符的规则
var box = ‘89‘; box++; //89,数值字符串自动转换成数值
var box = ‘ab‘; box++; //NaN,字符串包含非数值转成 NaN
var box = false; ++box; //1,false 转成数值是 0,累加就是 1
var box = 2.3; ++box; //3.3,直接加 1
var box = { //1,不设置 toString 或 valueOf 即为 NaN
toString : function() {
return 1;
}
}; box++;
3.加和减运算符
加运算规则如下:
var box = 100; +box; //100,对于数值,不会产生任何影响
var box = ‘89‘; +box; //89,数值字符串转换成数值
var box = ‘ab‘; +box; //NaN,字符串包含非数值转成 NaN
var box = false; +box; //0,布尔值转换成相应数值
var box = 2.3; +box; //2.3,没有变化
var box = { //1,不设置 toString 或 valueOf 即为 NaN
toString : function() {
return 1;
}
}; +box;
减运算规则如下:
var box = 100; -box; //-100,对于数值,直接变负
var box = ‘89‘; -box; //-89,数值字符串转换成数值
var box = ‘ab‘; -box; //NaN,字符串包含非数值转成 NaN
var box = false; -box; //0,布尔值转换成相应数值
var box = 2.3; -box; //-2.3,没有变化
var box = { //-1,不设置 toString 或 valueOf 即为 NaN
toString : function() {
return 1;
}
}; -box;
加法和减法运算符一般用于算术运算,也可向上面进行类型转换。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 5 <title>运算符</title> 6 <script type="text/javascript"> 7 /* 8 var box = 100; 9 ++box; 10 alert(box);//结果是101 11 12 var box = 100; 13 var age = ++box; 14 alert(age);//结果是101, box先自增1,再赋值给age 15 16 var box = 100; 17 var height = box++; 18 alert(height);//结果是100,box先赋值给height,在自增 19 20 var box = 100; 21 var height = --box 22 alert(height);//结果是99,先自减再赋值给height 23 24 var box = 100; 25 var age = box--; 26 alert(age);//结果是100,box先复制给age,再自减 27 */ 28 29 /* 30 var box = ‘89‘; 31 alert(box++); //89,数值字符串自动转换成数值 32 33 var box = ‘ab‘; 34 alert(box++); //NaN,字符串包含非数值转成 NaN 35 36 var box = false; 37 alert(++box); //1,false 转成数值是 0,累加就是 1 38 39 var box = 2.3; 40 alert(++box); //3.3,直接加 1 41 42 var box = { //2,不设置 toString 或 valueOf 即为 NaN 43 toString : function() { 44 return 1; 45 } 46 }; 47 alert(++box); 48 49 var box = {}; 50 alert(box++); 51 */ 52 53 /* 54 var box = 100; 55 alert(+box); //100,对于数值,不会产生任何影响 56 57 var box = ‘89‘; 58 alert(+box); //89,数值字符串转换成数值 59 60 var box = ‘ab‘; 61 alert(+box); //NaN,字符串包含非数值转成 NaN 62 63 var box = false; 64 alert(+box); //0,布尔值转换成相应数值 65 66 var box = 2.3; 67 alert(+box); //2.3,没有变化 68 69 var box = { //1,不设置 toString 或 valueOf 即为 NaN 70 toString : function() { 71 return 1; 72 } 73 }; 74 alert(+box); 75 76 var box = {}; 77 alert(+box); 78 */ 79 /* 80 var box = 100; 81 alert(-box); //-100,对于数值,直接变负 82 83 var box = ‘89‘; 84 alert(-box); //-89,数值字符串转换成数值且为负数 85 86 var box = ‘ab‘; 87 alert(-box); //NaN,字符串包含非数值转成 NaN 88 89 var box = false; 90 alert(-box); //0,布尔值转换成相应数值 91 92 var box = 2.3; 93 alert(-box); //-2.3,没有变化 94 95 var box = { //-1,不设置 toString 或 valueOf 即为 NaN 96 toString : function() { 97 return 1; 98 } 99 }; 100 alert(-box); 101 */ 102 103 </script> 104 </head> 105 106 <body> 107 欢迎来到javascript的世界 108 </body> 109 </html>
三.算术运算符:ECMAScript 定义了 5 个算术运算符,加减乘除求模(取余)。如果在算术运算的值不是数值,那么后台会先使用 Number()转型函数将其转换为数值(隐式转换)。
1.加法
var box = 1 + 2; //等于 3
var box = 1 + NaN; //NaN,只要有一个 NaN 就为 NaN
var box = Infinity + Infinity; //Infinity
var box = -Infinity + -Infinity; //-Infinity
var box = Infinity + -Infinity; //NaN,正无穷和负无穷相加等 NaN
var box = 100 + ‘100‘; //100100,字符串连接符,有字符串就不是加法
var box = ‘您的年龄是:‘ + 10 + 20; //您的年龄是:1020,被转换成字符串
var box = 10 + 20 + ‘是您的年龄‘; //30 是您的年龄,没有被转成字符串
var box = ‘您的年龄是:‘ + (10 + 20); //您的年龄是:30,没有被转成字符串
var box = 10 + 对象 //10[object Object],最后的类型是string类型,如果有 toString()或 valueOf()则返回 10+返回数的值
2.减法
var box = 100 - 70; //等于 30
var box = -100 - 70 //等于-170
var box = -100 - -70 //-30,一般写成-100 - (-70)比较清晰
var box = 1 - NaN; //NaN,只要有一个 NaN 就为 NaN
var box = Infinity - Infinity; //NaN
var box = -Infinity - -Infinity; //NaN
var box = Infinity - -Infinity; //Infinity
var box = -Infinity - Infinity; //-Infinity
var box = 100 - true; //99,true 转成数值为 1
var box = 100 - ‘‘; //100,‘‘转成了 0
var box = 100 - ‘70‘; //30,‘70‘转成了数值 70
var box = 100 - null; //100,null 转成了 0
var box = 100 - ‘Lee‘; //NaN,Lee 转成了 NaN
var box = 100 - 对象 //NaN,如果有 toString()或 valueOf()则返回 100-返回数的值
3.乘法
var box = 100 * 70; //7000
var box = 100 * NaN; //NaN,只要有一个 NaN 即为 NaN
var box = Infinity * Infinity; //Infinity
var box = -Infinity * Infinity ; //-Infinity
var box = -Infinity * -Infinity ; //Infinity
var box = 100 * true; //100,true 转成数值为 1
var box = 100 * ‘‘; //0,‘‘转成了 0
var box = 100 * null; //0,null 转成了 0
var box = 100 * ‘Lee‘; //NaN,Lee 转成了 NaN
var box = 100 * 对象 //NaN,如果有 toString()或 valueOf()则返回 100 - 返回数的值
4.除法
var box = 100 / 70; //1.42....
var box = 100 / NaN; //NaN
var box = Infinity / Infinity; //NaN
var box = -Infinity / Infinity ; //NaN
var box = -Infinity / -Infinity; //NaN
var box = 100 / true; //100,true 转成 1
var box = 100 / ‘‘; //Infinity,
var box = 100 / null; //Infinity,
var box = 100 / ‘Lee‘; //NaN
var box = 100 / 对象; //NaN,如果有 toString()或 valueOf()则返回 100 / 返回数的值
5.求模
var box = 10 % 3; //1,余数为 1
var box = 100 % NaN; //NaN
var box = Infinity % Infinity; //NaN
var box = -Infinity % Infinity ; //NaN
var box = -Infinity % -Infinity; //NaN
var box = 100 % true; //0
var box = 100 % ‘‘; //NaN
var box = 100 % null; //NaN
var box = 100 % ‘Lee‘; //NaN
var box = 100 % 对象; //NaN,如果有 toString()或 valueOf()则返回 100 % 返回数的值
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 5 <title>运算符</title> 6 <script type="text/javascript"> 7 /* 8 var box = 1 + 2; 9 alert(box);//等于 3 10 11 var box = 1 + NaN; 12 alert(box);//NaN,只要有一个 NaN 就为 NaN 13 14 var box = Infinity + Infinity; 15 alert(box);//Infinity 16 17 var box = -Infinity + -Infinity; 18 alert(box);//-Infinity 19 20 var box = Infinity + -Infinity; 21 alert(box);//NaN,正无穷和负无穷相加等 NaN 22 23 var box = 100 + ‘100‘; 24 alert(box);//100100,字符串连接符,有字符串就不是加法 25 26 var box = ‘您的年龄是:‘ + 10 + 20; 27 alert(box);//您的年龄是:1020,被转换成字符串 28 29 var box = 10 + 20 + ‘是您的年龄‘; 30 alert(box);//30 是您的年龄,没有被转成字符串 31 32 var box = ‘您的年龄是:‘ + (10 + 20); 33 alert(box);//您的年龄是:30,没有被转成字符串 34 35 var box = 10 + {} 36 alert(box);//10[object Object],最后的类型是string类型,如果有 toString()或 valueOf()则返回 10+返回数的值 37 38 39 var box =10+ { 40 toString:function(){ 41 return 100; 42 } 43 } 44 alert(box); 45 46 */ 47 48 49 /* 50 var box = 100 - 70; 51 alert(box);//等于 30 52 53 var box = -100 - 70 54 alert(box);//等于-170 55 56 var box = -100 - -70 57 alert(box);//-30,一般写成-100 - (-70)比较清晰 58 59 var box = 1 - NaN; 60 alert(box);//NaN,只要有一个 NaN 就为 NaN 61 62 var box = Infinity - Infinity; 63 alert(box);//NaN 64 65 var box = -Infinity - -Infinity; 66 alert(box);//NaN 67 68 var box = Infinity - -Infinity; 69 alert(box);//Infinity 70 71 var box = -Infinity - Infinity; 72 alert(box);//-Infinity 73 74 var box = 100 - true; 75 alert(box);//99,true 转成数值为 1 76 77 var box = 100 - ‘‘; 78 alert(box);//100,‘‘转成了 0 79 80 var box = 100 - ‘70‘; 81 alert(box);//30,‘70‘转成了数值 70 82 83 var box = 100 - null; 84 alert(box);//100,null 转成了 0 85 86 var box = 100 - ‘Lee‘; 87 alert(box);//NaN,Lee 转成了 NaN 88 89 var box = 100 - {} 90 alert(box);//NaN,如果有 toString()或 valueOf()则返回 100-返回数的值 91 92 var box = 100 - { 93 toString:function(){ 94 return 10; 95 } 96 }; 97 alert(box); 98 */ 99 100 101 /* 102 var box = 100 * 70; 103 alert(box);//7000 104 105 var box = 100 * NaN; 106 alert(box);//NaN,只要有一个 NaN 即为 NaN 107 108 var box = Infinity * Infinity; 109 alert(box);//Infinity 110 111 var box = -Infinity * Infinity ; 112 alert(box);//-Infinity 113 114 var box = -Infinity * -Infinity ; 115 alert(box);//Infinity 116 117 var box = 100 * true; 118 alert(box);//100,true 转成数值为 1 119 120 var box = 100 * ‘‘; 121 alert(box);//0,‘‘转成了 0 122 123 var box = 100 * null; 124 alert(box);//0,null 转成了 0 125 126 var box = 100 * ‘Lee‘; //NaN,Lee 转成了 NaN 127 128 var box = 100 * {} 129 alert(box);//NaN,如果有 toString()或 valueOf()则返回 100 - 返回数的值 130 */ 131 132 /* 133 var box = 100 / 70; 134 alert(box);//1.42.... 135 136 var box = 100 / NaN; 137 alert(box);//NaN 138 139 var box = Infinity / Infinity; 140 alert(box);//NaN 141 142 var box = -Infinity / Infinity ; 143 alert(box);//NaN 144 145 var box = -Infinity / -Infinity; 146 alert(box);//NaN 147 148 var box = 100 / true; 149 alert(box);//100,true 转成 1 150 151 var box = 100 / ‘‘; 152 alert(box);//Infinity,‘‘转换成0,两个数相除,第二个数不能为0 153 154 var box = 100 / null; 155 alert(box);//Infinity, 156 157 var box = 100 / ‘Lee‘; 158 alert(box);//NaN 159 160 var box = 100 / {}; 161 alert(box);//NaN,如果有 toString()或 valueOf()则返回 100 / 返回数的值 162 */ 163 /* 164 var box = 10 % 3; 165 alert(box);//1,余数为 1 166 167 var box = 100 % NaN; 168 alert(box);//NaN 169 170 var box = Infinity % Infinity; 171 alert(box);//NaN 172 173 var box = -Infinity % Infinity ; 174 alert(box);//NaN 175 176 var box = -Infinity % -Infinity; 177 alert(box);//NaN 178 179 var box = 100 % true; 180 alert(box);//0 181 182 var box = 100 % ‘‘; 183 alert(box);//NaN 184 185 var box = 100 % null; 186 alert(box);//NaN 187 188 var box = 100 % ‘Lee‘; 189 alert(box);//NaN 190 191 var box = 100 % {}; 192 alert(box);//NaN,如果有 toString()或 valueOf()则返回 100 % 返回数的值 193 194 */ 195 196 197 198 </script> 199 </head> 200 201 <body> 202 欢迎来到javascript的世界 203 </body> 204 </html>