hasOwnProperty和in和instanceof的使用
1.hasOwnProperty方法是用来检测当前属性是否为对象的私有属性(不仅要有这个属性,而且必须还是私有的才可以),该方法仅用于判断自身对象,不会查找原型链。
如下案例
function B() {
this.age = 18;
}
B.prototype.name = "b";//在原型对象上添加name属性
const b = new B();
console.log(b.hasOwnProperty("name")); //false
console.log(b.hasOwnProperty("age")); //true
b.name = "c";//在实例本身添加name属性
console.log(b.hasOwnProperty("name")); //true
2.in:检测当前对象是否存在某个属性(不管当前这个属性是对象的私有属性还是公有属性,只要有结果就是TRUE)
function B() { this.age = 18; } B.prototype.name = "b"; const b = new B(); console.log("name" in B); //true console.log("age" in B); //false console.log("name" in b); //true console.log("age" in b); //true
3.instanceof方法是判断某个对象是否由某个构造函数构建。
如A instanceof B,判断A对象是否由B构造函数创建。
通过__proto__一层层向上找,直到找到或找不到
const a = {}; function B() {} function myInstanceof(target, obj) { let p = target; while (p) { if (p === obj.prototype) { return true; } p = p.__proto__; } return false; } let b = new B(); console.log(myInstanceof(a, Function)); //false console.log(myInstanceof(a, Object)); //true console.log(myInstanceof(B, Function)); //true console.log(myInstanceof(B, Object)); //true console.log(myInstanceof(b, B)); //true console.log(myInstanceof(b, Function)); //false console.log(myInstanceof(b, Object)); //true
一般来说,js中的对象最终都是Object构造出来的。
因此 xxx instanceof Object的结果都是true.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通