浅谈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获取对象属性的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
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
-
JavaScript中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
-
浅谈js中的attributes和Attribute的用法与区别
一:Attribute的几种用法和含义(attributes和Attribute都是用来操作属性的) getAttribute:获取某一个属性的值: setAttribute:建立一个属性,并同时给属性捆绑一个值: createAttribute:仅建立一个属性: removeAttribute:删除一个属性: getAttributeNode:获取一个节点作为对象: setAttributeNode:建立一个节点: removeAttributeNode:删除一个节点: 1.getAttrib
-
浅谈JS中的!=、== 、!==、===的用法和区别
var num = 1; var str = '1'; var test = 1; test == num //true 相同类型 相同值 test === num //true 相同类型 相同值 test !== num //false test与num类型相同,其值也相同, 非运算肯定是false num == str //true 把str转换为数字,检查其是否相等. num != str //false == 的 非运算 num === str //false 类型不同,直接返回fals
-
浅谈js常用内置方法和对象
JS内置函数不从属于任何对象,在JS语句的任何地方都可以直接使用这些函数.JS中常用的内置函数如下: 1.eval(str)接收一个字符串形式的表达式,并试图求出表达式的值.作为参数的表达式可以采用任何合法的操作符和常数.如果参数中包含JS命令,这些命令也可以被执行,就像这些命令是JS程序的一部分一样. 2.parseInt(str,n)试图从一个字符串中提取一个整数.可附加一个n整数实现返回n进制整数.如果在字符串中存在除了数字.符号.小数点和指数符号以外的字符,就停止转换,返回已有的结果.如
-
浅谈JS数组内置遍历方法有哪些和区别
目录 forEach()(ES6)方法 map()(ES6) 方法 flatMap()方法 for...in... for...of... filter(ES6)遍历数组 every()函数(ES6) find()函数(ES6) findIndex()函数 (ES6) forEach()(ES6)方法 forEach()(ES6)方法对数组的每个元素执行一次给定的函数. 1. 数组里的元素个数有几个,该方法里的回调就会执行几次 2. 第一个参数是数组里的元素,第二个参数为数组里元素的索引
-
浅谈JS for循环中使用break和continue的区别
1.For循环 格式: for( 初始语句 ; 执行条件 ; 增量 ){ 循环体 } 执行顺序:1.初始语句 2.执行条件是否符合 3.循环体 4.增加增量 初始化语句只在循环开始前执行一次,每次执行循环体时要先判断是否符合条件,如果循环条件为true,则执行循环体,再执行迭代语句. 所以对于for循环,循环条件总比循环体多执行一次. 注意:for循环的循环体和迭代语句不在一起(while和do-while是在一起的)所以如果使用continue来结束本次循环,迭代语句还有继续运行,而while
-
浅谈js获取ModelAndView值的问题
JS当中不能接收ModelAndView的返回值吗?一定要在JSP页面中才能接收吗? 1 方法一 [有效] 可以的,跟el表达式访问方式一样. 示例代码,一个数据展示请求的Action中存入一个userId: @RequestMapping(value="/diary") public ModelAndView toDiaryList(HttpSession session){ ModelAndView view = new ModelAndView("/diary_list
-
浅谈JS正则表达式的RegExp对象和括号的使用
RegExp对象的创建: 常规的正则表达式的创建可用直接量,即斜杠 "/" 括起来的字符.但在要求参数变化的环境下,RegExp()构造函数是更好的选择: var reg1 = /'\w+'/g; var reg2 = new RegExp('\'\\w+\'','g'); 对比两种创建方式,RegExp中的第一个参数为要创建的正则字符串,一方面注意,因为不是直接量的表示形式,因此不用斜杠" / "括起来了:而是字符串中必须要对引号" ' "和转
-
浅谈JS读取DOM对象(标签)的自定义属性
DOM对象对于js来说,是个很基础的元素,我们写js一般来说,都一定会对它进行操作.我们可以很方便地给它加上自定义的属性,比如: <div id="test" class="hello"></div> var test = document.getElementById("test"); test.adang = "adang"; alert(test.adang); 我们会发现,已经给这个id为tes
随机推荐
- 修改ini文件的批处理与vbs代码
- asp.net 数据访问层基类
- 解决ASP.NET中Type.GetType方法总返回空的问题
- IE右键菜单被修改
- 批处理自动登录QQ小结及相关讨论
- asp.net MVC实现简单的上传功能
- Visual Studio 未能加载各种Package包的解决方案
- 在.Net中使用MongoDB的方法教程
- Aspjpeg添加水印完整方法
- Docker 自动部署tomcat详解
- javascript生成随机数的方法
- Go语言中new()和 make()的区别详解
- Struts2实现文件下载功能代码分享(文件名中文转码)
- 详解Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)
- java.net.ConnectException: Connection refused问题解决办法
- Spring boot实现文件上传实例(多文件上传)
- Android长按imageview把图片保存到本地的实例代码
- PHP迭代器接口Iterator用法分析
- Centos7.5配置java环境安装tomcat的讲解
- Gradle进阶使用结合Sonarqube进行代码审查的方法