1.数据类型
-
基本类型
- 已知5种:number,string,boolean,null,undefined
- ES6以后新增:Symbol,BigInt
知识点:Symbol.for(key),
Symbol 指的是独一无二的值。每个通过 Symbol() 生成的值都是唯一的。
数据类型之 Symbol、BigInt:juejin.cn/post/700075…
-
引用类型
-
object:
- 普通对象,数组对象,正则对象,Math对象,Date对象等
-
function
-
2.JS中的数据类型检测方案
-
typeof()
-
判断基本数据类型,返回一个string类型的数据类型
typeof 1 ==> "numble"
-
暂时性死区:当前检测的a未被声明定义,检测时
typeof a ==> "undefined"
,而不是报错 -
特例:
`typeof null ==> "object"
-
优点:能够快速区分基本数据类型
缺点:不能将Object、Array,Date,Null等区分,都返回objec,函数/类返回"function"
-
-
instanceof
-
判断实例对象是否属于类:
a instanceof A ==> true
-
优点:能够区分Array、Object和Function,适合用于判断自定义的类实例对象
缺点:Number,Boolean,String基本数据类型不能判断
-
-
Object.prototype.toString.call(xx) //逼格高,推荐使用
-
优点:精准判断数据类型
缺点:写法繁琐,建议进行封装
let _toString = Object.prototype.toString; console.log(_toString.call(0)); //=>[object Number]
-
-
constructor
- 构造函数:A 会生成有一个 prototype原型对象 ,默认所有的prototype原型对象会自动生成constructor属性,该属性值为构造函数本身。
- 创建一个新的实例对象,实例对象的内部
[[Prototype]]
会被赋值为构造函数的原型对象。a.__proto__=== A.prototype ==>true
- 实例与构造函数原型之间有直接的联系,但实例与构造函数之间没有
null/undefined
是一个假值,也不是任何构造函数的实例,所以不存在原型,无法使用constructor
判断类型。