Javascript 如何返回对象的所有属性及其值,包括可重用属性、自定义属性和继承属性?
到目前为止,我学到了: 1) 对于循环,我可以使用它来迭代对象中的索引,例如具有数字索引键的数组 2)Javascript 如何返回对象的所有属性及其值,包括可重用属性、自定义属性和继承属性?,javascript,Javascript,到目前为止,我学到了: 1) 对于循环,我可以使用它来迭代对象中的索引,例如具有数字索引键的数组 2) for..in循环为我提供了iterable和custom属性以及继承属性。但是,它忽略了值未定义的属性 例如 var array = [ 'Apples', , 'Pear' ]; array.newFn = function () { }; Array.prototype.anotherFn = function() { }; array.foo = bar; for (var pro
for..in
循环为我提供了iterable和custom属性以及继承属性。但是,它忽略了值未定义的属性
例如
var array = [ 'Apples', , 'Pear' ];
array.newFn = function () { };
Array.prototype.anotherFn = function() { };
array.foo = bar;
for (var prop in array)
console.log(prop);
将省略索引1
,因为它的值是未定义的
但是,它将迭代newFn
,另一个fn
和foo
3) for..of
对值而不是键进行迭代。不同之处在于,它只迭代所有iterable属性,忽略了自定义属性,也忽略了从原型链继承的属性。但是,在这样做时,包括那些属性键或属性值或两者都具有未定义值的值。同样,它仅针对对象的可重用、自身属性包含此项
是否存在一个循环构造,该构造可以迭代:
如果没有内置循环构造,则名为
键的对象上必须有一些反射属性,或者一些让我可以窥视的属性?最简单的方法是使用将索引设置为未定义的。您也可以使用null
var数组=['Apples',void 0,'Pear'];
array.newFn=函数(){};
Array.prototype.anotherFn=函数(){};
array.foo=“bar”;
for(数组中的var prop)
控制台日志(道具)代码>数组的索引1
的预期结果是什么undefined
?@guest271314 Yes.”将省略索引1,因为它的值未定义“不是因为它的值未定义,而是因为键未定义。”。这意味着没有定义名为1
的对象属性。@PatrickEvans谢谢。我被纠正了。我没有花时间来表达这个想法。你说的“可数”是指“可数”?看看吧,谢谢。这似乎没有迭代从原型链继承的属性。它看起来像for..in
将显式设置间隙为undefined
,正如您的代码在数组初始值设定项中所示。void
是一个计算表达式的运算符。您也可以选择使用null
对象。键不应该是此答案的一部分-OP也要枚举继承的属性。@Bergi已更新。