下面是针对这个主题的详细讲解:
下面是针对这个主题的详细讲解:
JavaScript中in和hasOwnProperty区别详解
what is in
in 关键字可以用于判断一个对象是否具有某个属性,或者一个数组中是否包含某个元素。其用法如下:
propertyNameOrIndex in objectOrArray
这里propertyNameOrIndex代表要查找的属性名或者数组中的索引位置,objectOrArray代表要查找的对象或者数组。
判断对象是否具有某个属性:
const obj = { name: 'Tom', age: 18 };
console.log('name' in obj); // true
console.log('email' in obj); // false
判断数组中是否包含某个元素:
const arr = [1, 2, 3];
console.log(0 in arr); // true
console.log(4 in arr); // false
what is hasOwnProperty
hasOwnProperty 方法是 JavaScript 中的一个实例方法,它返回一个布尔值,表示一个对象是否具有指定的属性。其用法如下:
obj.hasOwnProperty(propertyName)
这里obj代表要判断的对象,propertyName代表要查找的属性名。
判断对象是否具有某个属性:
const obj = { name: 'Tom', age: 18 };
console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('email')); // false
需要注意的是,hasOwnProperty 只能检测对象本身的属性,无法检测从原型继承的属性。
差异
它们的区别在于hasOwnProperty 可以检测对象本身的属性,无法检测从原型继承的属性,而 in 关键字可以检测对象本身的属性和从原型继承的属性。
function Person(name) {
this.name = name;
this.sayName = function() {
console.log(this.name);
};
}
Person.prototype.sayAge = function() {
console.log(this.age);
};
const tom = new Person('Tom');
tom.age = 18;
console.log(tom.hasOwnProperty('name')); // true
console.log(tom.hasOwnProperty('age')); // true
console.log('name' in tom); // true
console.log('age' in tom); // true
console.log(tom.hasOwnProperty('sayAge')); // false
console.log('sayAge' in tom); // true
由上例可以看到,tom 既有自己的属性,也从原型继承了方法,但是 hasOwnProperty 只能检测到 tom 自己的属性,无法检测到从原型继承的方法,而 in 关键字既能检测到自身的属性,也能检测到从原型继承的方法。
总结
- in 主要用于检测对象本身以及从原型继承的属性和元素。
- hasOwnProperty 只检测对象本身的属性和元素,无法检测从原型继承的属性和元素。
希望这篇文章能够帮助你清晰地理解 JavaScript 中的 in 和 hasOwnProperty。
本文标题为:JavaScript中in和hasOwnProperty区别详解
基础教程推荐
- 微信小程序的WXSS和全局、页面配置详细讲解 2022-08-31
- ubuntu 安装 wkhtmltopdf 的方法 2023-10-29
- Typescript中extends关键字的基本使用 2022-10-22
- 详解ajax跨域问题解决方案 2023-02-14
- 关于extjs:动态管理Ext.app.Application.controllers 2022-09-15
- nginx删除.php和.html文件扩展 2023-10-25
- vue 腾讯地图使用 行政区划范围 2023-10-08
- AJAX跨域问题解决方案详解 2023-02-24
- layui可折叠展开数据表格中嵌套表格功能实现 2023-11-30
- [使用Vue中的devServer.proxy代理跨域请求时的坑及奇妙的解决方法] POST 请求被转为了 GET 请求,并且传入的参数也被清除了。但是使用Postman测试接口时完全正常 2023-10-08