在遍历一个对象的时候我们会使用到for in属性。

现有对象和数组如下:

var filght = {
number: 1,
status: 'watit',
arrival: [1,2,3],
addName: function () {
return this.number + 99;
}
}
var arr = [
'name',
'age',
'number'
]

对于数组来说我们可以使用for来遍历 也可以使用for

for(var i=0; i< arr.length; i++){
console.log(arr[i]);
}
for(var k in arr){
console.log(k +':'+arr[k])
}

现在要遍历filght里面的属性,我们可以使用for in 但是不能使用 for来遍历,因为对象没有长度。

for(var k in filght){
console.log(k +':'+filght[k])
}

那么for 和for in 遍历最大的区别是for in可以遍历出原型对象的属性,但是for 不行。

现在我们给Array的原型添加属性。

Array.prototype.sayName = '111'

然后遍历。

for(var k in arr){
console.log(k +':'+arr[k])
}
console.log('-----------------------------------------------------');
for(var i=0; i< arr.length; i++){
console.log(arr[i]);
}

得到结果

证明 for in 循环的确可以遍历到原型对象上的属性。那么如果我们使用了for in 遍历,但是不想要得到原型上的属性怎么办呢。

对象不可以使用for 循环遍历,所有有一个hasOwnProperty 可以解决。

例如:先给Object原型添加属性

       Object.prototype.sayName = function(){
return "viven";
}

然后通过for in遍历

for(var k in filght){
console.log(k +':'+ filght[k]);
}

通过hasOwnProperty 过滤

for(var k in filght){
console.log(k +':'+ filght[k]);
}
console.log('===========================================')
for(var k in filght){
if(filght.hasOwnProperty(k)){
console.log(k +':'+ filght[k]);
}
}

得到结果

现在原型上的属性已经被过滤掉了。这个方法同样适用于Array数组

for in 与for 与hasOwnProperty的更多相关文章

  1. 步入angularjs directive(指令)--准备工作熟悉hasOwnProperty

    在讲解directive之前,先做一下准备工作,为何要这样呢? 因为我们不是简单的说说directive怎么用,还要知道为什么这么用!(今天我们先磨磨刀!). 首先我们讲讲js 基础的知识--hasO ...

  2. hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()的用法

    javascript中有原型这么一个概念,任何一个构造函数都有它对应的原型(prototype),我们可以给这个原型赋予一些我们想要的属性,像下面这样: function Gadget(name, c ...

  3. JavaScript对象篇之hasOwnProperty

    判断一个属性是定义在对象本身而不是继承自原型链,我们需要使用从 Object.prototype 继承而来的 hasOwnProperty 方法.hasOwnProperty 方法是 Javascri ...

  4. js中的hasOwnProperty和isPrototypeOf方法

    hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象.不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员. isPrototypeO ...

  5. JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别

    JS中isPrototypeOf 和hasOwnProperty 的区别 1.isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的 ...

  6. hasOwnProperty 递归 简单回调 链式调用

    1.hasOwnProperty 函数的返回值为Boolean类型.如果对象object具有名称为propertyName的属性,则返回true,否则返回false. function Box(){ ...

  7. [Effective JavaScript 笔记]第45条:使用hasOwnProperty方法以避免原型污染

    之前的43条,44条讨论了属性的枚举,但都没有彻底地解决属性查找中原型污染的问题.看下面关于字典的一些操作 'zhangsan' in dict; dict.zhangsan; dict.zhangs ...

  8. hasOwnProperty和in

    返回一个布尔值,指出一个对象是否具有指定名称的属性. hasOwnProperty 此方法无法检查该对象的原型链中是否具有该属in 可以检查原型链中是否具有该属

  9. JS中isPrototypeOf 和hasOwnProperty 的区别

    1.isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的原型链中,是则返回true,否则返回false. 格式如下: object ...

  10. hasOwnProperty

    var Person = function(){ this.name = "nike"; this.age = "20" } var person = new ...

随机推荐

  1. 计算几何-Ang-Rad-Vector

    This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. 旋转,跳跃,梦境 ...

  2. Java - 集合 - 定义和分类

    Java集合框架主要包括两种类型的容器:Collection和Map   层级结构图:evernote:///view/27699174/s49/d9aaf84e-e218-40a0-89c1-358 ...

  3. Kali部署DVWA和OWASPBWA

    自己的备忘录,这里记录Kali部署DVWA和OWASPBWA,其中遇到的问题会在下一篇文章记录 DVWA(Damn Vulnerable Web App)是一个基于PHP/MySql搭建的Web应用程 ...

  4. JDBC--处理Blob

    1.LOB(Large Objects)大对象,是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储多达4GB的数据) --LOB分类两种类型:1)内部LOB: 2)外部LOB: -- ...

  5. Spark原理概述

    原文来自我的个人网站:http://www.itrensheng.com/archives/Spark_basic_knowledge 一. Spark出现的背景 在Spark出现之前,大数据计算引擎 ...

  6. openstack自动化搭建脚本

    Openstack平台部署+节点扩容 1)搭建脚本 #!/bin/bash #openstack私有云平台部署 #脚本使用前提:三台虚拟机openstack(ip地址:.11至少4G内存,100G硬盘 ...

  7. opencv:Mat对象

    Mat对象:图像文件的内存数据对象 读取为 Mat 对象 读取图像位Mat对象,获取图像的相关信息 #include <opencv2/opencv.hpp> #include <i ...

  8. JAVA(4)之关于项目部署在tomcat

    关于项目部署的报错问题一直是找不到项目 在重装几次tomcat9和tomcat7后找到了原因,关键原因是访问路径不正确,项目名拼写错误. 排除问题的思路如下(控制变量法) 工作方法和思路 列出步骤,从 ...

  9. oop(面向对象)中的内置函数

    oop中的内置函数 ​ 类中存在一些名字带有双下划线__开头的内置函数, 这些函数会在某些时候被自动调用,例如之前学习的迭代器__init__函数 一.isinstance(obj, cls) 检查o ...

  10. spring与jdbc,mybatis的结合

    关键点在于把DataSource(数据源)配置到spring容器中,通过数据源获取数据库连接对象 数据库连接池(pool):管理数据库连接对象 四种数据源: 1)<!-- 基于jdk的规范数据源 ...