1. var obj = {
  2. name:"echolun",
  3. age:"",
  4. sex:"male"
  5. },
  6. objName=[], //用来装对象属性名
  7. objVal=[]; //用来装对象属性值
  8. for(var i in obj){
  9. objName.push(i);
  10. objVal.push(obj[i]);
  11. }
  12. console.log(objName,objVal);

需要注意的是,for in循环对象会访问原型链上所有对象属性,看下面。

  1. var obj = {
  2. name:"echolun",
  3. age:"",
  4. sex:"male"
  5. },
  6. objName=[], //用来装对象属性名
  7. objVal=[]; //用来装对象属性值
  8. Object.prototype.game="lastgame";
  9. for(var i in obj){
  10. objName.push(i);
  11. objVal.push(obj[i]);
  12. }
  13. console.log(objName,objVal);
  14. }

这里同样是循环对象obj,但是需要注意的是,原型链上我们额外添加的对象game也被循环出来。

那么我们只想循环对应的对象该怎么做呢,这里引入hasOwnProperty()方法,hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性。如果有,返回true,否则返回false。

说简单点,它能帮你指向你当前循环的对象,而过滤掉原型链上其它对象,因为在工作中我们很难保证其他人是否会修改原型链,这样做会更为保险,那么修改代码。

  1. var obj = {
  2. name:"echolun",
  3. age:"",
  4. sex:"male"
  5. },
  6. objName=[], //用来装对象属性名
  7. objVal=[]; //用来装对象属性值
  8. Object.prototype.game="lastgame";
  9. for(var i in obj){
  10. if(obj.hasOwnProperty(i)) {
  11. objName.push(i);
  12. objVal.push(obj[i]);
  13. }
  14. }
  15. console.log(objName,objVal);
  16. }

看吧,这下就过滤掉game了。

【JS】for in循环对象,hasOwnProperty()的作用的更多相关文章

  1. JS流程控制语句 继续循环continue continue的作用是仅仅跳过本次循环,而整个循环体继续执行。

    继续循环continue continue的作用是仅仅跳过本次循环,而整个循环体继续执行. 语句结构: for(初始条件;判断条件;循环后条件值更新) { if(特殊情况) { continue; } ...

  2. JS的函数和对象三

    复习 判断是否含有某个属性 对象.属性名 === undefined 对象.hasOwnProperty('属性名') '属性名' in 对象 方法  { say:function(){  this ...

  3. js中两个对象的比较

    代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> & ...

  4. JS基础与循环

    JS 简介 [JS的三种方式] 1.HTML标签中内嵌JS <button onclick="javascript:alert('白痴')">呵呵呵</butto ...

  5. js中的循环

    js中的循环是我们经常要用到的,现在进行一些归纳. 一.javascript种的循环. 1.循环对象 var o = { name: 'Jack', age: 20, city: 'Beijing' ...

  6. js的数组与对象关系

    有的时候总犯糊涂,不理解对象和数组的关系,转载一篇文章,深刻记忆一下 http://hi.baidu.com/samdan/item/05179313d1ee4b9e99ce3371 比如有一个数组a ...

  7. js 实现 多层级对象合并

    js 实现 多层级对象合并 首先 需求是使用js对数据的格式进行转换 把一个二维数组(包含层级信息,层级数是不固定的)list 转换为多层级的对象 我的思路就是 循环先把list里单条信息转换为 多层 ...

  8. 简单聊一聊JS中的循环引用及问题

    本文主要从 JS 中为什么会出现循环引用,垃圾回收策略中引用计数为什么有很大的问题,以及循环引用时的对象在使用 JSON.stringify 时为什么会报错,怎样解决这个问题简单谈谈自己的一些理解. ...

  9. js 之 for循环

    js之 for循环 普通for 循环 语法 for ([initialization]; [condition]; [final-expression]) statement initializati ...

随机推荐

  1. C++ 中的异常机制分析

    C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统 ...

  2. ubuntu apache linux

    在ubuntu下安装的apache, 很多配置文件都分开写了,需要了解一下各部分: http://blog.csdn.net/veizz/article/details/7410784 Ubuntu下 ...

  3. 前端开发 - jQuery

    本节内容 一.jQuery概述 二.选择器 三.操作DOM 四.修改DOM结构 五.事件 六.动画 七.AJAX(待续) 八.扩展(待续) 一.jQuery概述 jQuery 是一个 JavaScri ...

  4. 软件测试实践平台(Mooctest)FAQ

    0. 背景 我们在<软件测试技术>课程使用 MOOCTEST (mooctest.net) 作为课程的实践教学平台. 在教学过程中学生们遇到了一些问题,本文将一一总结. 注意:本文在解决问 ...

  5. C#如何在List里求某一列的數值的和SUM

    var X=Xlist.Sum(key => key.XXX);

  6. Android Dagger 2 无法自动生成 Dagger Component

    给项目升级 gradle(3.0)和 build(27)后发现 Dagger 2 无法自动生成 Dagger Component 类了. 原因竟是我把 : kapt 'com.google.dagge ...

  7. 09_python_初始函数

    一.定义 函数是对功能和动作的封装 def functionname( parameters ): "函数_文档字符串" function_suite return [expres ...

  8. Akka(0):聊聊对Akka的初步了解和想法

    前一段时间一直沉浸在函数式编程模式里,主要目的之一是掌握一套安全可靠的并发程序编程方法(concurrent programming),最终通过开源项目FunDA实现了单机多核CPU上程序的并行运算. ...

  9. CentOS7安装MYSQL。

    参考这个文章(网页已存到本地):http://www.cnblogs.com/starof/p/4680083.html 安装完成后,本地登录MYSQL没有问题. 现在主要是在windows下用ora ...

  10. cStringIO 实现指定大小的字符串缓存

    StringIO经常被用来作为字符串的缓存,以下实现无论写入多少字符串,总能返回一个指定大小的缓存 from cStringIO import StringIO class CustomStringI ...