Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用for/in在js中循环对象?_Javascript_Object - Fatal编程技术网

Javascript 如何使用for/in在js中循环对象?

Javascript 如何使用for/in在js中循环对象?,javascript,object,Javascript,Object,我读到: for…in循环的问题是它会在原型链中的属性之间进行迭代。当使用for…in循环遍历对象时,需要检查该属性是否属于该对象。可以使用hasOwnProperty执行此操作 那么原型链中的属性是什么 以及for/in如何迭代它们 我尝试在有和没有hasOwnProperty 但它给出了同样的结果 var myCar = { color : "red" , type : "sedan" , price : "100,000" , model : "2020"

我读到: for…in循环的问题是它会在原型链中的属性之间进行迭代。当使用for…in循环遍历对象时,需要检查该属性是否属于该对象。可以使用hasOwnProperty执行此操作 那么原型链中的属性是什么 以及for/in如何迭代它们

我尝试在有和没有
hasOwnProperty
但它给出了同样的结果

var myCar = {
    color : "red" ,
    type  : "sedan" ,
    price : "100,000" ,
    model : "2020"
};
var prop ;
for (prop in myCar) {
    if (myCar.hasOwnProperty(prop)){
        console.log(prop + " : " + myCar[prop])
    }
};

for (prop in myCar) {
        console.log(prop + " : " + myCar[prop])
};
两种代码的结果如下: 颜色:红色 类型:轿车 价格:100000
型号:2020

下面的修改代码显示了问题所在:

function Car(){
  this.color = "red";
  this.type  = "sedan";
  this.price = "100,000";
  this.model = "2020";
}

Car.prototype.test = function() {};

let myCar = new Car();

var prop ;
for (prop in myCar) {
    if (myCar.hasOwnProperty(prop)){
        console.log(prop + " : " + myCar[prop])
    }
};

for (prop in myCar) {
        console.log(prop + " : " + myCar[prop])
};
输出:

color : red
type : sedan
price : 100,000
model : 2020
color : red
type : sedan
price : 100,000
model : 2020
test : function() {}
在第二个循环的最后一次迭代中,将显示原型函数(或
Car
类的方法),即使它不是属性,但它属于
Car

我认为循环遍历对象属性的最佳方法是使用
object.keys

Object.keys(myCar).forEach(prop => {
  console.log(prop + " : " + myCar[prop]);
});

您可以将属性添加到对象的原型中,在中,这些属性将被视为对象的属性。该方法确定此属性是否为对象的直接属性

你可以阅读更多关于

功能车(){
this.color='red';
this.type=‘sedan’;
这个价格是‘100000’;
该模型='2020';
}
Car.prototype.foo='bar';
const car=新车();
console.log('Props');
用于(让道具进入车内){
log(`${prop}:${car[prop]}`);
};
console.log(“自己的道具”);
用于(让道具进入车内){
if(汽车自有财产(道具)){
log(`${prop}:${car[prop]}`);
}

};所有JavaScript对象都有一个原型<代码>for(obj中的prop)
枚举所有对象属性(拥有和继承自原型)。在您的例子中,原型没有任何属性,因此它们是等价的。
.hasOwnProperty
是一种仅在当前对象上定义而不是继承属性时才返回
true
的方法。您可以阅读更多内容。在ES6中,更好的方法是
for(Object.entries(myCar)的const[prop,value]){