JavaScript 数据类型
基本数据类型和引用数据类型
ECMASciprt
包括两个不同类型的值:基本数据类型和引用数据类型。- 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。
- 把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值。
常见的基本类型:
Number
、Boolean
、String
、null
、undefined
、Symbol
(ES6新增)、BigInt
(ES2020)
引用类型:
Object
(对象)、Array
(数组)、Function
(函数)、RegExp
(正则)、Date
(日期)、Map
(键值对)
如何判断数据类型
typeof
判断
typeof
运算符返回一个字符串,表示操作数的类型。number
、string
、boolean
、object
、undefined
、function
。typeof
可以对基本类型number
、string
、boolean
、undefined
做出准确的判断(null
除外,typeof null==="object"
,这是由于历史的原因)对于引用类型,除了function
之外返回的都是object
。
1 | console.log(typeof 123); // "number" |
instanceof
判断
instanceof
运算符用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上。
语法
1 | object instanceof constructor |
例子
1 | const arr = [1, 2, 3]; |
注意:instanceof
运算符只能用于对象,不适用原始类型的值,且大小写不能错。
请看下面例子:
1 | "hello world" instanceof String // false |
constructor
判断
constructor
指向创建该实例对象的构造函数
注意 null
和 undefined
没有 constructor
,以及 constructor
可以被改写,不太可靠
1 | const arr = [1, 2, 3]; |
为了规范,在重写对象原型时一般都需要重新给constructor
赋值,以保证实例对象的类型不被改写。
Object.prototype.toString()
toString()
方法返回一个表示该对象的字符串。
适用于所有类型的判断检测,注意区分大小写. toString()
,在Object
原型上返回数据格式,
toString()
是Object
原型对象上的一个方法,该方法默认返回其调用者的具体类型,严格的讲,是toString()
运行时this
指向的对象类型, 返回的类型格式为[object, xxx]
,xxx
是具体的数据类型,其中包括:String
, Number
, Boolean
, Undefined
, Null
, Function
, Date
, Array
, RegExp
,Error
, HTMLDocument
…, 基本上所有对象的类型都可以通过这个方法获取到。
1 | Object.prototype.toString.call(`Hello World`); // `[object String]` |