typeof instanceof constructor

首先我们需要了解到,在 JavaScript 中有 6 种不同的数据类型:

  • string
  • number
  • boolean
  • object
  • function
  • symbol

3 种对象类型:

  • Object
  • Date
  • Array

2 个不包含任何值的数据类型:

  • null
  • undefined

然后来看一下今天的重点

1.typeof 

操作符用来查看 JavaScript 变量的数据类型。

 

结论:

typeof可以精准的判断基本数据类型,但是数组(Array)、日期(Date)、对象、null 的数据类型都是 object,我们就无法通过 typeof 来判断他们的类型(无法准确判断引用数据类型)

2.instanceof

instanceof用来检测构造函数的prototype属性是否出现在某一个实例对象的原型链上,返回的是布尔值,也就是说会顺着原型链去找,直到找到相同的原型对象,返回true,否则为false

3.constructor 属性

constructor 属性返回创建该对象的函数,也就是构造函数。

"zs".constructor                 // 返回函数 String()  { [native code] }
(5.2).constructor                 // 返回函数 Number()  { [native code] }
false.constructor                  // 返回函数 Boolean() { [native code] }
[1,2,1].constructor              // 返回函数 Array()   { [native code] }
{name:'zs', age:16}.constructor  // 返回函数 Object()  { [native code] }
new Date().constructor             // 返回函数 Date()    { [native code] }
function () {}.constructor         // 返回函数 Function(){ [native code] }

区分array  date

function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}

isArray([1,2,1])       // 返回 true

function isDate(myDate) {
    return myDate.constructor.toString().indexOf("Date") > -1;
}

isDate(new Date()) // 返回 true

4.万能的Object.prototype.toString.call()

toString()是Object原型对象上的方法,返回的是代表该对象的字符串。
调用Object.prototype.toString方法返回的格式是[object Xxxx],其中Xxxx就是对象的类型。
而对于其他对象(Array、String、Number、Boolean、RegExp、Date等),则需要通过call、apply来调用才能返回正确的类型信息。

拓展:

封装函数判断数据类型

function getStyle(data) {
      let type = typeof(data)
      if(type !=="object") {
        return type
      }
      return Object.prototype.toString.call(data).replace(/^\[object (\S+)\]$/, "$1")
    }
getStyle([])

参考文章:js封装一个判断数据类型的函数_js判断类型封装_卖菜的小白的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值