检测数据类型的方法

本文介绍了JavaScript中用于检测数据类型的几种方法,包括typeof操作符(能检测基本类型和函数,但对于引用类型只返回object,但无法识别Symbol类型),instanceof关键字(用于检查对象是否为特定构造函数的实例),通过constructor属性判断以及使用toString.call()方法来获取对象的[[Class]]内部属性值,从而识别数据类型。

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

js数据类型的检测方式

  1. typeof
  • 能检测基本类型(null除外,它返回object)和函数,对于引用类型只返回object
  • 也可以检测ES6新增的Symbol类型
    console.log(typeof 123); //number
    console.log(typeof 'abc'); //string
    console.log(typeof true); //boolean
    console.log(typeof undefined); //undefined
    console.log(typeof null); //object
    console.log(typeof [1,2,3]); //object
    console.log(typeof {a:1,b:2,c:3}); //object
    console.log(typeof function(){}); //function
    console.log(typeof Symbol()); //symbol
  1. instanceof
  • 用来检测一个对象是否为某个类(构造函数)的实例,返回布尔值
  • 语法:object instanceof constructor
    console.log([1,2,3] instanceof Array); //true
    console.log({a:1,b:2,c:3} instanceof Object) //true
    
    // 定义一个类
    class Cat {
        constructor(name) {
            this.name = name;
        }
        walk() {
            console.log('I can walk');
        }
    }
    
    // 实例化
    let cat = new Cat('Vue');
    
    // 检测
    console.log(cat instanceof Cat); //true

3.constructor

  • constructor是对象上的属性,指向构造函数
    let num = 123;
    console.log(num.constructor); //ƒ Number() { [native code] }
    console.log('abc'.constructor); //ƒ String() { [native code] }
    console.log(true.constructor); //ƒ Boolean() { [native code] }
    console.log([1,2,3].constructor); //ƒ Array() { [native code] }
    console.log({a:1,b:2,c:3}.constructor); //ƒ Object() { [native code] }
    console.log(function(){}.constructor); //ƒ Function() { [native code] }
    console.log(new Date().constructor); //ƒ Date() { [native code] }
    console.log(/^[a-z]{2,5}$/.constructor); //ƒ RegExp() { [native code] }
    console.log(Symbol().constructor); //ƒ Symbol() { [native code] }

4.toString.call()

  • 相当于 Object.prototype.toString.call
    console.log(toString.call(123)); //[object Number]
    console.log(toString.call('abc')); //[object String]
    console.log(toString.call(true)); //[object Boolean]
    console.log(toString.call(undefined)); //[object Undefined]
    console.log(toString.call(null)); //[object Null]
    console.log(toString.call([1,2,3])); //[object Array]
    console.log(toString.call({a:1,b:2,c:3})); //[object Object]
    console.log(toString.call(function(){})); //[object Function]
    console.log(toString.call(new Date())); //[object Date]
    console.log(toString.call(/^[a-z]{2,5}$/)); //[object RegExp]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值