JavaScript数据类型
有几种数据类型
JavaScript语言的每一个值,都属于某一种数据类型。JavaScript的数据类型,共有六个类别和两个特殊值。
六个类别的数据类型又可以分成两组:原始类型(primitive type)和合成类型(complex type)。
原始类型(也叫值类型,把一个值类型传递给另一个变量(赋值)时,其实是分配了一块新的内存空间)包括:
合成类型(也叫引用类型,引用类型变量的交换其实是交换了指像同一个内容的地址)包括:
- object
- array
- function
两个特殊值:
- null
- undefined
这里需要明确的是,JavaScript的所有数据,都可以视为对象。不仅合成类型的数组和函数属于对象的特例,就连原始类型的数据(数值、字符串、布尔值)也可以用对象方式调用。
如何判断数据类型
JavaScript有三种方法,可以确定一个值到底是什么类型。
- typeof运算符
- instanceof运算符
- Object.prototype.toString方法
typeof运算符有六种返回结果,string、number、boolean、function、undefined和object
数值、字符串、布尔值分别返回number、string、boolean
1
2
3typeof 123 // "number"
typeof "123" // "string"
typeof false // "boolean"函数返回function
1
2
3// 定义一个空函数
function f(){}
typeof f // "function"undefined返回endefindd
1
typeof undefined // "undefined"
除此之外,都返回object
1
2
3
4typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
instanceof运算符只有两种返回的结果,true和false
instanceof运算符用来确定一个对象是否是某个构造函数的实例。instanceof运算符的左边放置对象,右边放置构造函数。在JavaScript之中,只要是对象,就有对应的构造函数。因此,instanceof运算符可以用来判断值的类型。
1
2
3[1, 2, 3] instanceof Array // true
({}) instanceof Object // true
(function(){}) instanceof Function //true需要注意的是,由于原始类型的值不是对象,所以不能使用instanceof运算符判断类型。
1
"" instanceof String // false 1 instanceof Number // false true instanceof Boolean //false
Object.prototype.toString方法同样有6种返回结果
数值:返回[object Number]。
1
Object.prototype.toString.call(2) // "[object Number]"
字符串:返回[object String]。
1
Object.prototype.toString.call('') // "[object String]"
布尔值:返回[object Boolean]。
1
Object.prototype.toString.call(true) // "[object Boolean]"
undefined:返回[object Undefined]。
1
Object.prototype.toString.call(undefined) // "[object Undefined]"
null:返回[object Null]。
1
Object.prototype.toString.call(null) // "[object Null]"
对象:返回[object + “构造函数的名称”] 。
1
2
3Object.prototype.toString.call(Math) // "[object Math]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call([]) // "[object Array]"