Js数据类型检测

一、了解什么是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]
  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值