一、了解什么是js的数据类型
1、js的数据类型包括两大部分,分别是:
(1)基本数据类型
(2)引用数据类型
2、基本数据类型包括7大类,分别为:
(1)Number(数字类型)
(2)String(字符串类型)
(3)Boolean(布偶值类型)
(4)Null(空指针类型)
(5)Undefined(已声明但未赋值的类型)
(6)Symbol(唯一值类型)
(7)BigInt(最大整数对象类型)
3、引用数据类型是Object(引用数据类型),包括有Object,Array,Function,Date
二、4种需要了解掌握的检测方式
1、typeof()
typeof是通过检查给定表达式的内部[[Class]]属性来检测的
优点:可以检测出5种类别,分别是
基本数据类型:number,string,boolean,undefined
引用数据类型:object
缺点:不能区分基本类型中的null以及数组array,因为它们返回的值都是object
console.log(typeof(1)) //number
console.log(typeof("string")) //string
console.log(typeof(true)) //boolean
console.log(typeof(null)) //object
console.log(typeof([])) //object
console.log(typeof({})) //object
console.log(typeof(undefined)) //undefined
console.log(typeof(Symbol)) //function
console.log(typeof(BigInt)) //function
console.log(typeof(new Date())) //object
(1)为什么基本类型null会返回出引用数据类型的object
因为Js中的基本数据类型都存储在32位的二进制单元当中,低三位的数字用于表示该数据的类型。
000: object - 当前存储的数据指向一个对象。
1: int - 当前存储的数据是一个 31 位的有符号整数。
010:double - 当前存储的数据指向一个双精度的浮点数。
100: string - 当前存储的数据指向一个字符串。
110:boolean - 当前存储的数据是布尔值。
有两种特殊数据类型:
1.undefined 的值是 (-2)30 (一个超出整数范围的数字)
2.null 的值是机器码 NULL 指针(null 指针的值全是 0)
当传入一个null后,由于该值的前三位与object的前三位值一致,所以,会被判定为object
2、A instanceof B
instanceof操作符用于检查一个对象是否是某个构造函数的实例
优点:可以检测复杂类型的数据
缺点:检测不出undefined以及null,因为由于undefined和null都不是对象,并且都没有原型链,所以会报错
console.log(null instanceof Null) // Uncaught ReferenceError: Null is not defined
console.log(undefined instanceof Undefined) // Uncaught ReferenceError: Undefined is not defined
console.log([] instanceof Array) // true
console.log({} instanceof Object) // true
3、(值).constructor
constructor它返回对创建该对象的构造函数的引用,可以确定该对象属于哪个构造函数,从而得知其数据类型。
优点:可以检测到object里面数组的类型
缺点:检测不出undefined以及null,因为这两个值身上没有构造函数,所以会报错
console.log((1).constructor) //ƒ Number() { [native code] }
console.log(("string").constructor) //ƒ String() { [native code] }
console.log((null).constructor) //Uncaught TypeError: Cannot read properties of null (reading 'constructor')
console.log((undefined).constructor) //Uncaught TypeError: Cannot read properties of undefined (reading 'constructor')
console.log(([]).constructor) //ƒ Array() { [native code] }
console.log(({}).constructor) //ƒ Object() { [native code] }
4、Object.prototype.toString.call()
通过调用 JavaScript 对象的 toString() 方法来判断数据类型的。这个方法会返回一个字符串,表示该对象的数据类型
优点:方法可以监测出所有类型的数据
缺点:代码书写起来比较复杂
console.log(Object.prototype.toString.call(1)) //[object Number]
console.log(Object.prototype.toString.call("string")) //[object Number]
console.log(Object.prototype.toString.call([])) //[object Array]
console.log(Object.prototype.toString.call({})) //[object Object]
console.log(Object.prototype.toString.call(null)) //[object Null]
console.log(Object.prototype.toString.call(undefined)) //[object Undefined]