ToBoolean操作
参数类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 结果等于输入的参数(不转换) |
Number | 如果参数为+0,-0或NaN,则结果为false;否则为true |
String | 如果参数为空字符串,则结果为false;否则为true |
Object | true |
逻辑NOT运算符
由感叹号(!)表示,逻辑NOT运算符返回的一定是Boolean值。
运算行为如下:
- 如果运算数是对象,返回false
- 如果运算数是数字0,返回true
- 非空字符串返回false,空字符串返回true
- 如果运算数是null,返回true
- 运算数是NaN,返回true
- 运算数是undefined,返回true
可以使用两次!!来获取运算数的布尔值
逻辑AND运算符
使用双引号(&&)表示
运算数1 | 运算数2 | 结果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
逻辑AND运算的运算数可以是任何类型的,不止是Boolean值。
如果某个运算数不是原始的Boolean型值,逻辑AND运算并不一定返回Boolean值:
- 一个运算数是对象,另一个是Boolean值,返回该对象
- 两个运算数都是对象,返回第二个对象
- 某个运算数是null,返回null
- 某个运算数是NaN,返回NaN
- 某个运算数是undefined,发生错误
ECMAScript中的逻辑AND运算是简便运算,即如果第一个运算数决定了计算结果,就不再计算第二个运算数。对于逻辑AND运算来说,如果第一个运算数是false,那么无论第二个运算数的值是什么结果都不会是true
var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult); //输出 "false"
逻辑OR运算符
使用双竖线(||)表示:
运算数1 | 运算数2 | 结果 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
与逻辑AND运算符相似,如果某个运算数不是Boolean值,逻辑OR原酸并不一定返回Boolean值:
- 如果一个运算数是对象,并且该对象左边的运算数值为false,则返回该对象
- 如果两个运算数都是对象,返回第一个对象
- 如果最后一个运算数是null,并且其他运算数值均是false,则返回null
- 如果运算数和NaN,并且其他运算数值均为false,则返回NaN
- 如果两个运算数都是undefined,返回undefined
和逻辑AND运算符一样,逻辑OR运算也是简便运算。如果第一个运算数值为true,就不再计算第二个运算数
var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult); //输出 "true"
乘法运算符
用(*)表示:
- 结果溢出生成结果为Infinity或-Infinity
- 如果某个运算数是NaN,结果为NaN
- Infinity乘以0,结果为NaN
- Infinity乘以0以外的任何数字,结果为Infinity或-Infinity
- Infinity乘以Infinity,结果为Infinity
- 如果一个操作数不是数值,则在后台调用Number()将其转换为数值,然后再应用上面的规则
除法运算
用(/)表示:
- 如果结果太大或太小,生成结果是Infinity或-Infinity
- 如果某个数是NaN,结果为NaN
- Infinity被任何数字除,结果为Infinity,被Infinity除结果是NaN
- 0除一个任何非无穷大的数字,结果是Infinity或-Infinity
- Infinity被0以外的任何数字除,结果为Infinity或-Infinity
- 如果有一个操作数不是数值,则调用Number()将其转换为数值,然后在应用上面的规则
求模
求模(余数)操作符有一个百分号(%)表示。
- 如果两个操作数都是数值,执行常规的除法计算,返回除得的余数
- 如果被除数是无穷大值而除数是有限大的数值,则结果返回NaN
- 如果被除数是有限大的数值而除数是零,则结果为NaN
- 如果是Infinity被Infinity除,结果为NaN
- 如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数
- 如果被除数是0,则结果为0
- 如果有操作数不是数值,调用Number()转换为数值,在应用上述规则
比较数字和字符串
var bResult = "25" < "3"
alert(bResult) //输出"true"
上述代码比较的是字符串"25"和"3"。两个运算数都是字符串,多以比较的是它们的字符代码(“2” 的字符代码是 50,“3” 的字符代码是 51)。
var bResult = "25" < 3
alert(bResult) //输出"false"
上述代码,字符串"25"将被转化成数字25,然后与数字3进行比较。
无论何时比较一个数字和一个字符串,ECMAScript都会把字符串换成数字,然后按照数字顺序比较它。
var bResult = "a" < 3;
alert(bResult);
上述代码中"a"不能转换成有意义的数字。不过,如果对它调用parseInt()将会返回NaN,任何包含NaN的关系运算符都要返回false。
var bResult = "a" >= 3;
alert(bResult);
同理,上述代码也返回false
等号与非等号
在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。
执行类型转换的规则:
- 如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true为1
- 如果一个运算数是字符串,另一个是数字,在检查想等性之前,要尝试把字符串转换成数字。
- 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串
- 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字
在比较时,该运算符还要遵守下列规则:
- 值null和undefined相等
- 在检查相等性时,不能把null和undefined转换成其他值。
- 如果某个运算数是NaN,等号将返回false,非等号将返回true
- 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一个对象,那么等号返回true,否则两个运算数不等。
注:即使两个数都是NaN,等号仍然返回false,因为根据规则,NaN不等于NaN
表达式 | 值 |
---|---|
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 |
全等号和非全等号
全等号(===
),非全等号(!==
)