详谈js使用in和hasOwnProperty获取对象属性的区别
in判断的是对象的所有属性,包括对象实例及其原型的属性;
而hasOwnProperty则是判断对象实例的是否具有某个属性。
示例代码:
<script type="text/javascript"> function Person(){ } Person.prototype.name = "allen"; var person = new Person(); console.log(person.hasOwnProperty("name")); //false console.log("name" in person); //true console.log(person.name); //"allen" person.name = "justforse"; console.log(person.hasOwnProperty("name")); //true console.log("name" in person); //true console.log(person.name); //"justforuse" delete person.name; console.log(person.hasOwnProperty("name")); //false console.log("name" in person); //true console.log(person.name); //"allen" </script>
以上代码执行的时候,name属性要么是从实例中获取的,要么是来源于原型,所以使用in 来访问 name属性始终返回true;而hasOwnProperty()只在属性存在与对象实例中时才返回true,当删除了实例中的name属性后,就恢复了原型中name属性的连接,所以返回allen。
以上这篇详谈js使用in和hasOwnProperty获取对象属性的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
浅谈js使用in和hasOwnProperty获取对象属性的区别
in判断的是对象的所有属性,包括对象实例及其原型的属性: 而hasOwnProperty则是判断对象实例的是否具有某个属性. 示例代码: <script type="text/javascript"> function Person(){ } Person.prototype.name = "allen"; var person = new Person(); console.log(person.hasOwnProperty("name&qu
-
JavaScript中in和hasOwnProperty区别详解
每当代码读取某个对象的某个属性时,都会执行一次搜索,目标是具有给定名字的属性.搜索首先从对象实例本身开始.如果在实例中找到了具有给定名字的属性,则返回该属性的值:如果没有找到,则继续搜索指针指向的原型对象,在原型对象中查找具有给定名字的属性.如果在原型对象中找到了这个属性,则返回该属性的值. 虽然可以通过对象实例访问保存在原型中的值,但却不能通过对象实例重写原型中的值.如果在实例中添加一个与原型中属性同名的属性,则该属性会屏蔽原型中的那个属性.添加的同名属性只会阻止我们访问原型中的那个属性,但不
-
Javascript中的for in循环和hasOwnProperty结合使用
与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in 不会读取不可枚举属性,如数组的length属性. 小结 当检测某个对象是否拥有某个属性时,hasOwnProperty 是唯一可以完成这一任务的方法,在 for in 循环时,建议增加 hasOwnProperty 进行判断,可以有效避免扩展本地原型而引起的错误. 与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in 不会读取不可枚举属性,如数组的length属性. 复制代码 代码如下: /
-
Javascript hasOwnProperty 方法 & in 关键字
此方法无法检查该对象的原型链中是否具有该属性:该属性必须是对象本身的一个成员. in 操作检查对象中是否有名为 property 的属性.也可以检查对象的原型,判断该属性是否为原型链的一部分. 复制代码 代码如下: function Test(){ this. a= 'abc'; } Test.prototype.b='efg'; var test=new Test; alert(test.hasOwnProperty('a'));//输出 true alert(test.hasOwnPrope
-
详谈js使用in和hasOwnProperty获取对象属性的区别
in判断的是对象的所有属性,包括对象实例及其原型的属性: 而hasOwnProperty则是判断对象实例的是否具有某个属性. 示例代码: <script type="text/javascript"> function Person(){ } Person.prototype.name = "allen"; var person = new Person(); console.log(person.hasOwnProperty("name&qu
-
JS获取对象属性名总结
最近面试遇到问如何获取对象全部属性名的方法,总结一下: 对象属性类型分类: 1.ESMAScript分类 数据类型 又分为可枚举和不可枚举类型 访问器类型 2.上下文分类 原型属性 实例属性 1.列举自身但不包括原型的可枚举属性名 Object.keys(obj) // 遍历对象 function Person(name, age) { this.name = name; this.age = age; } Person.prototype.demo = function() {}; let c
-
PHP获取对象属性的三种方法实例分析
本文实例讲述了PHP获取对象属性的三种方法.分享给大家供大家参考,具体如下: 今天查看yii源码,发现yii\base\Model中的attribute()方法是通过反射获取对象的public non-static属性.记得以前看到的代码都是用get_object_vars()这个函数获取的,昨天查看php文档,发现还可以用foreach遍历对象属性.于是写个例子练习下. class TestClass { private $a; protected $b; public $c; public
-
Python获取对象属性的几种方式小结
本文将简单介绍四种获取对象的方法. 假如有以下的类: class Person(object): def __init__(self, name, age): self.name = name self.age = age def __str__(self): return 'name=%s, age=%s' % (self.name, self.age) 方法一:使用属性运算符 print(xmr.name) 方法二:通过属性字典__dict__ print(xmr.__dict__['nam
-
Python类及获取对象属性方法解析
1.类外面添加对象属性 class Washer(): def wash(self): print('do some laundry stuff') haier1 = Washer() #添加属性,对象名.属性名 = 值 haier1.width = 400 haier1.height = 500 对象属性既可以在类外面添加和获取,也可以在类里面添加和获取 在类外面获取对象属性: 在上方代码上添加: print(f'洗衣机宽度为{haier1.width}') print(f'洗衣机高度为{ha
-
C#高性能动态获取对象属性值的步骤
动态获取对象的性能值,这个在开发过程中经常会遇到,这里我们探讨一下何如高性能的获取属性值.为了对比测试,我们定义一个类People public class People { public string Name { get; set; } } 然后通过直接代码调用方式来取1千万次看要花多少时间: private static void Directly() { People people = new People { Name = "Wayne" }; Stopwatch stopw
-
JS中script标签defer和async属性的区别详解
向html页面中插入javascript代码的主要方法就是通过script标签.其中包括两种形式,第一种直接在script标签之间插入js代码,第二种即是通过src属性引入外部js文件.由于解释器在解析执行js代码期间会阻塞页面其余部分的渲染,对于存在大量js代码的页面来说会导致浏览器出现长时间的空白和延迟,为了避免这个问题,建议把全部的js引用放在</body>标签之前. script标签存在两个属性,defer和async,因此script标签的使用分为三种情况: 1.<script
-
Java如何获取对象属性及对应值
利用反射获取对象的所有属性及对应的值 1.获取属性名数组 private static String[] getFiledName(Object o) { Field[] fields = o.getClass().getDeclaredFields(); String[] fieldNames = new String[fields.length]; for (int i = 0; i < fields.length; i++) { fieldNames[i] = fields[i].getN
-
Java如何基于反射获取对象属性信息
先建立一个类,有四种属性: private int id; private String name; private byte by; private short st; 以下方法,创建一个对象,然后打印该对象的属性名字,属性值,和属性的类型: public class T { public static void main(String[] args) throws Exception { User u = new User(); u.setId(1); u.setName("cc"
随机推荐
- PHP下escape解码函数的实现方法
- 把Lua函数传递到C/C++中实例
- 简单分析SCVVHSOT.exe病毒
- PHP简单开启curl的方法(测试可行) 原创
- python实现简单聊天应用 python群聊和点对点均实现
- ASP下使用Access数据库需要注意的18条安全法则
- Android小米推送简单使用方法
- Android应用的Material设计中图片的相关处理指南
- JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
- PowerShell函数用Hash表传参实例
- 用VBS实现一个小键盘动作CTRL+V粘贴操作与思路分析
- Linux 连续执行多条命令的方法(推荐)
- C++的sstream标准库详细介绍
- Jqgrid之强大的表格插件应用
- jQuery中:animated选择器用法实例
- JavaScript 中的日期和时间及表示标准介绍
- 浅析js封装和作用域
- java 文件目录读写删除操作详细实现代码
- JAVA基础之控制台输入输出的实例代码
- Java与WebUploader相结合实现文件上传功能(实例代码)