类型检测
-
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)
原创好难,如果对你有帮助的话,点个赞再走吧~~~~~~