001-数据类型判断方式

本文详细介绍了JavaScript中的数据类型分类(基础和引用),比较了typeof和instanceof两种判断数据类型的优缺点,以及如何利用Object.prototype.toString()进行类型优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先补充一下基础知识:数据类型

数据类型分为:基础数据类型引用数据类型

基础数据类型常见有:string、number、boolean、null、undefined、symbol(不常用)

引用数据类型常见有:object、array、function

1、常用判断数据类型为 typeof instanceof
  • typeof  

判断一个值,返回一个字符串

typeof '0'    // 'string'

typeof 0     // 'number'

typeof  true   // 'boolean'

typeof null    // 'object'

typeof undefined    // 'undefined'

typeof Symbol()    // 'symbol'

typeof []    // 'object'

typeof {}    // 'object'

typeof new Function()    // 'function'

结论:

  • 优点:
  1. 在基本数据类型中可以看出,除 null以外的类型都为可以直接判断出
  2. 在引用数据类型中可以看出,除function可以直接判断以外,其他的无法直接判断
  3. 对于null 的判断 直接 使用 全等 ===
  • 缺点
  1. 无法判断引用类型中的array 和object 两种类型
  •  instanceof

原理:判断 构造函数的原型 是否 出现在实例对象的原型链

先简单补充一下基础知识:构造函数、原型、实例对象、原型链之间的关系。
跳转:原型及原型链详解

function G_vespa(name){    // 构造函数
    this.name=name
}
G_vespa.prototype.age='18'    // 原型

const vespa1=new G_vespa('小龚')    // 实例对象

console.log(vespa1.name)    // '小龚'

console.log(vespa1.age)    // 先找实例对象上的属性,没有; 继续在实例对象的继承原型链上找属性 '18'

使用方式:left instanceof right  ,返回一个boolean 值。

'0' instanceof anytype    // false
let str=new String()
str instanceof String    // true

0 instanceof anytype    // false
let num=new Number(0)
num instanceof Number    // true


{} instanceof Object    //true
let _obj=new Object()
_obj instanceof Object    // true


[] instanceof Array    //true
let _array=new Array()
_array instanceof Array    // true

let fun1=function(){}
fun1 instanceof Function    //true
let fun2=new Function()
fun2 instanceof Function    // true


结论:

  • 优点
  1. instanceof 可以判断引用类型
  • 缺点
  1. 无法准确的判断基本数据类型(可以判断通过构造函数创建的变量)
总结:两种类型的判断都有一定的优缺点,可根据实际场景使用。
2、优化使用Object.proptotype.toString()

Object.prototype.toString() 返回 "[object Type]",这里的 Type 是对象的类型。

call 可替换为apply (传入一个参数并调用)  跳转:call、apply、bind详解

const arr = [1, 2, 3];

arr.toString(); // "1,2,3"
Object.prototype.toString.call(arr); // "[object Array]"
Object.prototype.toString.apply(arr); // "[object Array]"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值