1、转型函数Boolean()
可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean值。转换规则如下:
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零数字值(包含无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | 不存在 | undefined |
引自《JavaScript高级程序设计(第3版)》
该方法很好用,比如笔者经常会对Ajax返回的data做合法检查,如下:
if(data !=null && data!= undefined && data != ""){ //other code... }
现在就可以改为如下判断:
if(true == Boolean(data)){ //other code... }
由于ECMAScript会在if语句中自动调用Boolean()转换函数,所以,这样即可!
if(data){ //other code... }
另,ECMAScript还有其他转型函数String()、Number()。
2、数据类型--Number
2.1 数值范围
JS也有数值范围,最大值存在Number.MAX_VALUE,最小值存在Number.MIN_VALUE
当超过边界值时,正数会被转换成Infinity,负数则为-Infinity。这两个值是不可计算的,因为根本不是具体的数值。
isFinite()函数,可用于判断某个数值是否有穷(即处于最小值与最大值间),是则返回true
2.2 NaN
NaN,即非数值(Not a Number),用于表示一个本来要返回数值的操作数未返回数值的情况。如除0的返回值。
- 任何涉及NaN的操作都会返回NaN
- NaN与任何值都不相等,包括NaN本身。
isNaN()函数,用于确定是否“不是数值”,入参先被转换为数值,如果不能转换,则返回true。
1 alert(isNaN(NaN)); //true 2 alert(isNaN(10)); //false 3 alert(isNaN("10")); //fasle 4 alert(isNaN("hi")); //true 5 alert(isNaN(true)); //false
2.3 数值转换
3、布尔操作符
3.1 逻辑非
无需多说。对数字的处理如下。
alert(!0) ; //true alert(!1); //false alert(!Infinity) //false
3.2 逻辑与
与JAVA等语言不通,JavaScript的逻辑与、非的左右操作数可以是任意类型,返回值也不一定是布尔类型。在有一个操作数不是布尔值的情况下,规则为:
- 如果第一个操作数是对象,则返回第二个操作数;
- 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
- 如果两个操作数都是对象,则返回第二个操作数;
- 如果有一个操作数是null,则返回null;
- 如果有一个操作数是NaN,则返回NaN;
- 如果有一个操作数是undefined,则返回undefined。