Javascript 类型转换

终于结束了在象牙塔里的生活,开始苦逼的码农生活了!
开始转战前端,希望自己能够掌握JS。本博客的参考资料为:JavaScript权威指南

Make thing ready

在开始之前,先介绍一张表,如下表所示,是JavaScript类型转换表

转换为字符串 数字 布尔值 对象
undefined “undefined” NaN false throws TypeError
null “null” 0 false throws TypeError
true “true” 1 throws TypeError
false “false” 0 throws TypeError
“”(空字符串) 0 false new String(“”)
“123”(数字) 123 true new String(“123”)
“one”(非数字) NaN true new String(“one”)
0 “0” false new Number(0)
-0 “0” false new Number(-0)
NaN “NaN” false new Number(NaN)
Infinity “Infinity” true new Number(Infinity)
-Infinity(无穷大,非零) “-Infinity” true new Number(-Infinity)
1 “1” true new Number(1)
{}(任意对象) 参考下文 参考下文 true
[](任意数组) “” 0 true
[9](一个数字元素) “9” 9 true
[‘a’](其他数组) 使用join()方法 NaN true
function(){}(任意函数) 参考下文 NaN true

对象转换成原始值

JavaScript中的原始值包含undefined、null、布尔值、数字和字符串。而对象除了普通对象,还包含了函数和数组。
原始值就是不可更改的:任何方法都无法更改一个原始值。而原始值的比较是值的比较,只有在它们的值相等时它们才相等。

对象到布尔值的转换

对象到布尔值的转换很简单,所有的对象(包括数组和函数)都转换为true。对于包装对象亦是如此:new Boolean(false)是一个对象,而不是一个原始值,它将被转换成true。

对象到字符串的转换

所有的对象继承了两个转换函数,一个是toString(),一个是valueOf()。第一个函数的作用是返回一个反映这个对象的字符串,第二个函数未明确定义,如果存在任意原始值,将将对象转换为表示它的原始值。由于对象是复合值,而且大多数对象无法真正表示为一个原始值,因此默认的valueOf()方法简单地返回对象本身,而不是返回一个原始值。
JavaScript中对象到字符串的转换经过了如下步骤:

  1. 如果对象具有toString方法,则调用这个方法。如果它返回一个原始值,就将这个值转换成字符串,并返回这个字符串。具体的转换见上表。
  2. 如果对象没有toString方法或者该方法并不返回一个原始值,则调用valueOf方法。如果存在valueOf方法,就调用它。如果返回原始值,将这个原始值转换成字符串,并返回。
  3. 否则,表示没有办法通过这两个方法获得一个原始值,将抛出类型异常。

对象到数字的转换

对象到数字的转换过程中,做了和到字符串的转换一样的事情,但是调用方法的不同。

  1. 如果对象具有valueOf方法,后者返回一个原始值,则JavaScript将这个原始值转换为数字,并返回这个数字。
  2. 否则,如果将对象具有toString方法,后者返回一个原始值,则JavaScript将其转换并返回。
  3. 否则,JavaScript抛出一个类型错误异常。

你可能感兴趣的:(Javascript)