JavaScript数据类型可以分为两类:原始类型和对象
原始类型
原始类型包括:数字、字符串和布尔值、null(空)、undefined(未定义)
对象
JavaScript语言核心已经预定义几种类型的对象。数组是一种特殊的对象,JavaScript为数组定义了专用的语法,使数组拥有一些和普通对象不同的行为特性。函数是另一种特殊的对象,具有与它相关联的可执行代码的对象,通过调用函数来运行可执行代码,并返回运算结果。果函数用来初始化一个新建对象,我们称之为构造函数。每个构造函数定义为一类对象,类可以看做是对象类型的子类型
除了数组类(Array)、函数类(Function),JavaScript定义了其他几种有用的类:
- 日期类(Date)定义了代表日期对象。
- 正则类(RegExp)定义了表示正则表达式的对象。
- 错误类(Error)定义了那些表示程序中运行时错误和语法错误的对象。
数字
JavaScript中不区分整数值和浮点数值。JavaScript中所有的数字均用浮点数值表示
JavaScript支持多种格式的数字直接量
- 整型直接量
- 浮点型直接量
数据类型转换
纯数字字符串可以直接转换成数字,即使开始和结尾处带有空格也可以。
若开始和结尾处的任意非空格字符串都不会被当成数字直接量的一部分,进而造成字符串转换为数字的结果为NaN
转换和相等性
一个值转换成另一个值并不意味着两个值相等,比如在期望使用布尔值的地方只用了undefined,它将会转换成false,但这并不表明undefined == false。“==” 从不试图将其操作数转换为布尔值
显式类型转换
做显式类型转换最简单的方法就是使用Boolean()、Number()、String()、Obejct()
隐式类型转换
如果“+”运算符的一个操作数是字符串,它将会把另外一个操作数转换为字符串。一元“+”运算符将其操作数转换为数字。同样,一元“!”运算符将其操作数转换为布尔值并取反,例如
x + "" // 等价于String(x)
+X // 等价于Number(x)
!!X // 等价于Boolean(x) 注意是双感叹号
对象转换为原始值
对象到字符串的转换和对象到数字的转换是通过调用待转换对象的一个方法
toString()
调用toString()返回一个反应这个对象的字符串,其默认并不会返回一个有趣的值,例如:
({x:1, y:2}).toString() // => "[Obejct Obejct]"
很多类重写了toString()方法,例如:数组类的toString方法将每个数组元素转换为一个字符串,并在元素之间添加逗号后合并成结果字符串。函数类的toString()方法返回这个函数的源代码字符串
valueOf()
如果对象存在任意原始值时,调用valueOf()时它就默认将对象转换为表示它的原始值。如果对象是复合值时,调用vlaueOf()时它只能返回对象本身
数组、函数、正则表达式类只是简单的继承了这个默认的方法,调用这些类的实例的valueOf()方法知识简单的返回对象本身,日期类重写了valueOf(),调用日期类的实例valueOf方法会返回它的一个内部表示:实例所对应时间到1970年1月1日的毫秒数