我想知道检查对象是否是类/构造函数的实例的这两种方法之间是否存在任何差异。我搜索了它并发现了这两种方式。
obj instanceof SomeConstructor
obj.constructor === SomeConstructor
所以我的问题是: 两者之间有什么区别吗?
哪一个是更好的做法?
另外,还有其他方法比这两个更好吗?
答案 0 :(得分:1)
在网上找到了这个,
<强>的instanceof 强>
instanceof运算符测试构造函数的prototype属性是否出现在对象的原型链中的任何位置。
构造强>
返回对创建实例对象的Object构造函数的引用。请注意,此属性的值是对函数本身的引用,而不是包含函数名称的字符串。
参考
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor
答案 1 :(得分:0)
根据@Nisal Edu的解释,instanceof
携带原型存在于对象链中,否则返回false。 obj.constructor === Object
是每个返回true的对象的必要值。
这意味着
obj.constructor === Object // always return true
obj instanceof Object //return false if prototype is nowhere in object's prototype chain