数据类型的分类
JS
在ES 5.1
中共有六种数据类型:
string
:字符串类型number
:数值类型boolean
:布尔类型,发明该类型的人叫布尔,出于纪念和尊敬undefined
:undefined
类型,该值表示一个量被创建但却没有赋值null
:null
类型,该值的本质是一个引用地址,但是该引用地址指向一个空值object
:对象类型、引用类型Object
Function
Array
Date
String
Number
Boolean
在以上六种类型当中,string、number、boolean、undefined、null
为值类型,这些值具备静态特性,引擎会把它们存储在栈(stack)
当中;object
为引用类型,该类型的数据存在堆(heap)
当中。
当我们进行数据传递(赋值、传参、返回值)时,值类型是将该数据的值进行传递,而引用类型是将该数据的引用地址(指针)进行传递。值的传递我们称之为深拷贝,引用地址的传递我们称之为浅拷贝。
typeof
操作符可以查看数据的基本类型,typeof
返回类型的字符串表示,typeof
本身存在缺陷,如下表所示:
特殊的:
typeof string -> string
typeof number -> number
typeof boolean -> boolean
typeof undefined -> undefined
typeof null -> object
typeof object -> object
typeof function -> function
typeof array -> object
表达式 | 结果 |
---|---|
typeof 2048 | number |
typeof "hello" | string |
typeof true | boolean |
typeof undefined | undefined |
typeof null | object |
typeof object | object |
typeof (function f(){}) | function |
typeof [1, 2, 3] | object |
typeof (new Date()) | object |
我们除了通过typeof
来判断基本数据类型以外,还可以通过instanceof
来判断一个数据是否是某一个引用类型,用判断实例化和构造关系:
console.log([1] instanceof Array);