所以,相应的,也就存在一个其他数据类型与Boolean字面值的对应关系,如下表所示:
数据类型 转换为true的值 转换为false的值Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零数字值(包含无穷大) 0和NaN
Object 任何对象 null
Undefined 不适用 undefined
在程序运行的时候,比如在流控制语句中,识别程序自动执行相应的Boolean转换是很重要的,请看下例:
var text = "Hi"; if(text){ alert(value is true); }
上面代码在执行时,变量text就会被自动用Boolean()函数转换为Boolean类型。如果还要用String类型的text的话,那么就是一个重大错误了。所以一定要确切的知道在流控制语句中使用的是什么变量。
5、Number类型Number类型使用IEEE754格式来表示整数和浮点数值。
Javascript中最基本的数值字面值格式是十进制整数,除此之外整数还可以通过八进制(八进制字面值第一位为0,后面是0~7的八进制数字序列)、十六进制(前两位为0x,后跟任何十六位数字,0~9,及A~F)。在进行算术运算时,所有数值都将被转换成十进制数值进行计算。
在Number类型中,我主要想说以下几个问题:
1、永远不要测试某个特定的浮点数值,请看下例:
if(a + b == 0.3) //不要做这样的测试 alert("你得到了0.3!");
如果这里a和b分别是0.05和0.25,或者是0.15和0.15都不会有问题,如果这两个值是0.1和0.2,那么测试就将无法通过。
2、数值范围:
最小值:Number.MIN_VALUE = 5e-324 = -Infinity
最大值:Number.MAX_VALUE = 1.7976931348623157e+308 = Infinity
如果在计算当中超过了最大或最小,都会被相应的转换为+Infinity或者-Infinity。
当计算0/0时,会得到NaN,计算正数/0会得到Infinity,计算负数/0会得到-Infinity。
3、NaN,即非数值,是一个特殊的值。这个数值用来表示一个本来要返回数值的操作数未返回数值的情况。
NaN的特点:第一、任何涉及NaN的操作都会返回NaN。因为ECMAScript中任何数值除以非数值都会返回NaN,从而不会影响其他代码执行,所以这个特点在多步计算中可能会导致问题。其次、NaN与任��值都不想等,包括自身。
针对这两个特点,ECMAScript定义了isNaN()函数,该函数接受一个任何类型的参数,函数会帮助我们确定这个参数是否是NaN。任何不能被转换成为数值的值都会导致这个函数返回true。请看下例:
alert(isNaN(NaN)); //true alert(isNaN(10)); //false alert(isNaN("true")); //true
4、数值转换
把非数值转换成数值的方法有Number()、paserInt()、parseFloat(),其中Number()可以接受任意类型的参数,paserInt()、parseFloat()则专门用于转换字符串。
Number()类型的转换规则:
(1)布尔值:true=1,false=0;
(2)null=0;
(3)undefined=NaN;
(4)字符串:
a: 字符串是数值,转换成十进制,忽略前导0,如果以“0x”开头,则按照十六进制解析成十进制(由此可见,八进制是个特殊的存在)
b:字符串是空串,转换为0;
c:除此之外全部转换成NaN;
(5)对象:方法和isNaN()判断对象的方法基本相同。