在javascript 里面,当一种类型的值用于需要某种其他类型的值的环境中,那么javascript将自动尝试把值转换为所需类型,而这就是javascript的自动类型转换机制。
下标简单的描述了所有数据类型转换的过程:这里所要转换成的类型是 字符串,数字,布尔,对象:见下表。。。。。。
-------------------------------------------------------------------------------------------------------
在这里主要说说对象这种类型到基本数据类型的转化:
1.转换成布尔值
无论在什么情况下,一个非空对象在布尔环境中的时候,它都是被转换为true。这对于任何对象,数字倘或函数都是适用的。
2.转换成数字
在对象转换为数字时,其有几个步骤要做的。首先调用通过调用对象的valueOf方法来转换为数字的对象。由于大多对象默认的valueOf()方法什么都没有做,所以调用了这个方法后,其返回的都是对象本身,所以接下来的一步就是调用toString()方法,在返回对象的字符串后,就尝试把结果转换为一个数字。
这对数组产生了一个有趣的结果。数组的toString()方法吧数组元素转换为字符串,然后把各个字符连接起来,形成结果。如果没有元素,那么就会转换为0。如果只有一个元素,而且是一个数字,那么转换结果就是这个数字。如果包含多个元素,如果其中一个元素不是数字,都会返还NaN.
和数据类型紧密相关的是运算符产生的结果:
对于一个对象和一个运算符使用的情况,它应该自动转换为数字还是字符串,这仍然不是很明确。但是我们遵循转换的步骤的话,就能够推敲的出其结果了。
值 | 值所使用的环境 |
字符串 | 数字 | 布尔 | 对象 |
未定义值 | ‘undefined’ | NaN | False | Error |
null | ‘null’ | 0 | False | Error |
非空字符串 | 不变 | 字符串的数字 值或NaN | True | String对象 |
空字符串 | 不变 | 0 | False | String对象 |
0 | ‘0’ | 不变 | False | Number 对象 |
NaN | ‘NaN’ | 不变 | False | Number 对象 |
无穷 | ‘infinity’ | 不变 | True | Number对象 |
负无穷 | ‘-infinity’ | 不变 | True | Number 对象 |
True | ‘true’ | 1 | 不变 | Boolean对象 |
False | ‘false’ | 0 | 不变 | Boolean对象 |
对象 | to String() | valueOf() , toString(), 或者NaN | True | 不变 |