JS中判断数据类型的几种方法

目录

1.typeof

2.constructor

3.instanceof

4.Object.prototype.toString.call


1.typeof

📙 语法 : typeof(需要判断的数据变量)

📙 特点: 

🍀 对于基本数据类型,除了null外都可以返回正确的结果;对于null,返回的是Object

🍀 对于引用数据类型,除了function外,其余返回的都是一个Object;对于function返回的是function

<script>

   // 1. typeof
        console.log(typeof('123'))  // string
        console.log(typeof(123))  // number
        console.log(typeof(true))  // boolean
        console.log(typeof(undefined))  // undefined
        console.log(typeof([1, 2, 3]))  // object
        console.log(typeof({a:1}))  // object

</script>

2.constructor

📙 语法 : 待检测数据.constructor === class

📙 特点:

🍀 用于判断引用数据类型

🍀 能够判断当前数据的构造函数是谁

🍀 不能判断 undefined 和 null

<script>

   // 2. constructor
        const arr = [1, 2, 3]
        console.log(arr.__proto__.constructor)  // constructor 指向当前这个原型是哪个构造函数的原型
        console.log(arr.constructor)  // constructor 指向当前这个原型是那个构造函数的原型
        console.log(arr.constructor === Array)  // true
        console.log(arr.constructor === Function)  // false


        console.log(arr.__proto__)    // 自己构造函数的原型对象
        console.log(Array.prototype)    // 构造函数 Array 的原型对象
        console.log(Array.prototype.constructor)    // 构造函数 Array 的原型对象


        Array.prototype.constructor = { a: 1 }
        console.log(Array.prototype.constructor)  // {a: 1}
        console.log(arr.__proto__.constructor === Array)  // false

        console.log(undefined.constructor)  // undefined 内部没有 constructor 所以我么不能这样去判断
        console.log(null.constructor)  // null 内部 没有 constructor 所以我们不用这样去判断

</script>

 

3.instanceof

📙 语法:(检测数据 instanceof [class]) ,返回一个true或false

📙 特点:

🍀 可以区分复杂数据类型

🍀 只要是在当前实例对象的原型链上,检测出来的结果就是 true

🍀 不能判断 undefined 和 null

<script>

  const arr = [1, 2, 3]
        const obj = {
            a: 1,
            b: 2
        }
        /**
         *  instanceof
         *      判断左边的构造函数是否等于右边的
        */
        console.log(arr instanceof Array)  //true
        console.log(arr instanceof Function)  //false
        console.log(obj instanceof Array)  //false
        console.log(obj instanceof Object)  //true

        Array.prototype.constructor = { a: 1 }
        console.log(arr instanceof Array)  //true

        console.log(undefined instanceof Array)  //false
        console.log(undefined instanceof Object)  //false
        console.log(undefined instanceof Function)  //false

</script>

 4.Object.prototype.toString.call

📙 语法 : Object.prototype.toString.call(要判断的数据结构)

📙 特点:

🍀 适用于所有数据类型的判断

🍀 Object 这个构造函数的原型内部有一个 toString 的方法,这个方法能够帮我们将数据结构转为字符串的形式    '[object 数据结构]'

🍀 我们在使用的时候 如果需要判断其他数据类型, 需要使用 .call这个方法改变内部 this 指向

<script>

   const arr = [1, 2, 3]
        const obj = {
            a: 1,
            b: 2
        }
        /**
         *  Object 这个构造函数的 原型内部 有一个 toString 的方法
         *      这个方法能够帮我们将数据结构转为字符串的形式    '[object 数据结构]'
         * 
         *      我们在使用的时候 如果需要判断其他数据类型, 需要使用 .call这个方法改变内部 this 指向
         * 
         *  这个方法任何数据类型都能准确判断(推荐使用)
        */
        console.log(Object.prototype.toString.call([]))  // [object Array]
        console.log(Object.prototype.toString.call(function () { }))  // [object Function]
        console.log(Object.prototype.toString.call(undefined))  // [object Undefined]
        console.log(Object.prototype.toString.call(null))  // [object Null]

</script>

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兰de宝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值