【原创纯手打】JavaScript数据类型检测看这一篇就够了

类型检测

  • typeof

    • 对于基本类型,除 null 以外,均可以返回正确的结果。
    • 对于引用类型,除 function 以外,一律返回 object 类型。
    • 对于 null ,返回 object 类型。
    • 对于 function 返回 function 类型
    • typeof   对于基本数据类型判断是没有问题的,但是遇到引用数据类型(如:Array)是不起作用 
  • instanceof 判断是否是某个构造函数的实例

    不能检测简单数据类型

       判断 new 关键字创建的引用数据类型,不考虑 null 和 undefined(这两个比较特殊)以对象字面量创建的基本数据类型

只能检测复杂数据类型

console.log("数字", 10 instanceof Number)
console.log("布尔", true instanceof Boolean)
console.log("字符串", "" instanceof String)
console.log("对象", {} instanceof Object)
console.log("函数", function(){} instanceof Function)
console.log("数组", [] instanceof Array)
  • constructor 判断构造函数

 
 

可以应对基本数据类型和引用数据类型 但如果声明了一个构造函数,并且把他的原型指向了 Array 的原型,所以这种情况下,constructor 也显得力不从心

console.log("数字", (10).constructor == Number) console.log("字符串", ('你好').constructor == String) console.log("布尔", (true).constructor == Boolean) console.log("对象", ({}).constructor == Object) console.log("数组", ([]).constructor == Array) console.log("函数", (function () { }).constructor == Function)

toString

Object.prototype   原型对象
__proto__          原型

console.log("数字",Object.prototype.toString.call(1))
console.log("字符串",Object.prototype.toString.call(""))
console.log("布尔",Object.prototype.toString.call(true))

console.log("对象",Object.prototype.toString.call({}))
console.log("数组",Object.prototype.toString.call([]))
console.log("函数",Object.prototype.toString.call(function(){}))

构造函数、原型对象和实例化对象的关系

function Demo() {

}
let obj = new Demo()
// console.log(Demo.prototype)   //构造函数的原型对象
// console.log(obj.__proto__)    //实例化对象的原型
// console.log(Demo.prototype == obj.__proto__)
console.log(Demo.prototype.constructor)

原创好难,如果对你有帮助的话,点个赞再走吧~~~~~~

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值