Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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 如何返回对象的所有属性及其值,包括可重用属性、自定义属性和继承属性?_Javascript - Fatal编程技术网

Javascript 如何返回对象的所有属性及其值,包括可重用属性、自定义属性和继承属性?

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

到目前为止,我学到了:

1) 对于循环,我可以使用它来迭代对象中的索引,例如具有数字索引键的数组

2)
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已更新。