乘性操作符
有三种乘性操作符,乘法,除法和求模。
在操作数为非数值的情况下会执行自动类型转换,调用Number()转型函数将其转为数值。
1.乘法(*)
乘法操作符由一个符号(*)表示,用于计算两个数值的乘积。
var result = 36 * 24; //结果为864
特殊的规则:
- 操作数都是数值,执行常规的乘法计算。乘积超过ECMAScript数值的范围,则返回Infinity或-Infinity;
- 操作数是NaN,返回NaN;
- Infinity与0相乘,返回NaN;
- Infinity与非0数值相乘,返回Infinity或-Infinity。
- Infinity与Infinity相乘,返回Infinity;
- 有一个操作数不是数值,自动调用Number()转换为数值相乘;
2.除法(/)
除法操作数由一个符号(/)表示,用于计算两个数值相除的商。
var result = 66 / 11; //结果为6
特殊规则:
- 操作数都是数值,执行常规的除法计算。商超过ECMAScript数值的范围,则返回Infinity或-Infinity;
- 操作数是NaN,返回NaN;
- Infinity被Infinity除,返回NaN;
- 零被零除,返回NaN;
- 非零的有限数被零除,返回Infinity或-Infinity;
- Infinity被任何非零数值除,返回Infinity或-Infinity;
- 有一个操作数不是数值,自动调用Number()转换为数值相除;
加性操作符
1.加法
加法操作符(+)的用法如下所示:
var result = 1 + 2; //结果为3
特殊规则:
- 有一个操作数是NaN,则结果是NaN;
- Infinity加Infinity,则结果是Infinity;
- -Infinity加-Infinity,则结果是-Infinity;
- Infinity加-Infinity,则结果是NaN;
- +0加+0,则结果是+0;
- -0加-0,则结果是-0;
- +0加-0,则结果是+0;
- 两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;
- 只有一个操作数是字符串,则将另一个操作室转换为字符串,然后再将两个字符串拼接起来;
- 有一个操作数是对象、数值或布尔值,则调用它们的toString()方法取得相应的字符串值,再拼接。
2.减法
减法操作符(-)的用法如下所示:
var result = 2 - 1; //结果为1
特殊规则:
- 有一个操作数是NaN,则结果是NaN;
- Infinity减Infinity,则结果是NaN;
- -Infinity减-Infinity,则结果是NaN;
- Infinity减-Infinity,则结果是Infinity;
- -Infinity减Infinity,则结果是-Infinity;
- +0减+0,则结果是+0;
- -0减-0,则结果是+0;
- -0减0,则结果是-0;
- +0减-0,则结果是+0;
- 有一个操作数是String、boolean、null或Undefind,则自动调用它们的Number()方法取得相应的字符串值,再执行减法计算,如果转换为NaN,则结果为NaN。
- 有一个操作数是对象,则调用对象的valueOf()方法以取得表示该对象的数值。如果得到的是NaN,则结果就是NaN。如果对象没用valueOf()方法,则调用其toString()方法并将得到的字符串转换为数值。
关系操作符
小于(<)、大于(>)、小于等于(<=)、大于等于(>=)
相应的规则:
- 如果两个操作数都是数值,则执行数值比较。
- 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
- 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
- 如果一个操作数是对象,则调用这个对象的valueOf()方法,用得到的结果按照前面的规则执行比较;如果对象没有valueOf()方法,则调用toString()方法,并得到的结果根据前面的规则执行比较。
- 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。
- 相等操作符
- 相等和不相等——先转换再比较
- 全等和不全等——仅比较而不转换
1.相等和不相等
相等操作符由两个等号(==)表示。如果两个操作数相等,则返回true。
不相等操作符由(!=)表示。如果两个操作数不相等,则返回true。
这个两个操作符都会先转换操作数(通常称为强制转型),然后再比较它们的相等性。
它们有以下规则:
- 如果有一个操作数是布尔值,则比较相等性之前先将其转换为数值——false转换为0,而true转换为1;
- 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前将字符串转换为数值;
- 如果一个数是对象,另一个操作数不是,则调用对象的valueOf()方法,得到的基本类型值按照前面的规则进行比较。
- null和undefined是相等的
- 比较相等性之前,不能将null和undefined转换成其他任何值。
- 如果有一个操作数是NaN,则(==)返回false,而(!=)返回true。NaN不等于NaN;
- 如果两个操作数都是对象,则比较它们是不是同一个对象。 如果两个操作数都指向同一个对象,则(==)返回true;否则false。
还有一些特殊情况及比较结果:
表达式 | 值 |
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
2.全等和不全等
全等操作符由3个等号(===)表示,它只在两个操作数未经过转换就相等的情况下返回true。
不全相等操作符由(!==)表示,它在两个操作数未经过转换就不相等的情况下返回true。
null == undefined 返回的是true,它们是类似的值;
null === undefined 返回的是false,它们是不同的类型的值。
三元运算符
a ? b :c;
判断a的boolean值,true就返回b,false返回c。
赋值操作符
简单的赋值操作符由等号(=)表示。
作用把(=) 右边赋值给(=)左边的变量。
复合赋值操作符
- 乘/赋值(*=);
- 除/赋值(/=);
- 模/辅助(%=);
- 加/赋值(+=);
- 减赋值(-=);
- 左移/赋值(<<=);
- 有符号右移/赋值(>>=);