Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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 为什么[].slice.call()返回“空插槽”?_Javascript - Fatal编程技术网

Javascript 为什么[].slice.call()返回“空插槽”?

Javascript 为什么[].slice.call()返回“空插槽”?,javascript,Javascript,我试图将一个复杂的对象包装在一个长度为1的数组中,也就是说,对象是数组中唯一的条目,我希望在类构造函数中这样做。为了达到这一目的,我一直在玩[].slice.call,当我为了测试目的到处玩时,我在控制台中尝试了以下操作: foo = {"a":{"a1":1},"b":{"b1":2},length: 2}; [].slice.call(foo); 我得到了一个长度为2的数组,其中有两个空插槽 考虑到[].slice.call{a:1,b:2,length:2}产生了[1,2],我本来希望得

我试图将一个复杂的对象包装在一个长度为1的数组中,也就是说,对象是数组中唯一的条目,我希望在类构造函数中这样做。为了达到这一目的,我一直在玩[].slice.call,当我为了测试目的到处玩时,我在控制台中尝试了以下操作:

foo = {"a":{"a1":1},"b":{"b1":2},length: 2};
[].slice.call(foo);
我得到了一个长度为2的数组,其中有两个空插槽

考虑到[].slice.call{a:1,b:2,length:2}产生了[1,2],我本来希望得到一个长度为2的数组,如下所示: [{a1:1},{b1:2}],而不是两个空插槽。[].slice.call是否仅适用于一维对象,或者是否存在其他问题?如果有人能澄清,请提前向我们表示感谢

切片将仅迭代对象的数字索引属性。见:

让相对论开始吧。 所以,若start未定义,比如调用slice时不带参数,则relativeStart为0

然后,它将从relativeStart或0迭代数字标记,如果relativeStart为负值,直到对象的length属性值:

如果relativeStart为负,则k为maxlen+relativeStart,0;否则,让k成为Minestart,len。 八,。如果relativeEnd为负,则将final设为maxlen+relativeEnd,0;否则就让最后一场吧,伦

十,。当k 将obj[k]推入正在创建的新数组类对象中 因此:

[].slice.call是否仅适用于一维对象,或者是否存在其他问题

它仅适用于具有数字属性的对象。如果您具有非数值属性,则不会使用slice对其进行迭代

如果你想

将复杂对象包装在长度为1的数组中,即该对象是数组中的唯一条目

然后使用[foo],例如:

常量foo={a:{a1:1},b:{b1:2},长度:2}; const wrappedFoo=[foo]; console.logwrappedFoo 您用作call参数的对象将作为slice的this参数传递,并且它将只在前面提到的对象的数值属性上工作。如果使用数字属性,它将按预期工作:

设foo1={0:1,1:2,length:2}; console.log[].slice.callfoo1; 设foo2={0:{a1:1},1:{b1:2},长度:2}; console.log[].slice.callfoo2; .as控制台{背景颜色:黑色!重要;颜色:石灰;}
.as控制台包装器{max height:100%!important;top:0;}给定[].slice.call{a:1,b:2,length:2}生成了[1,2],我无法复制。我得到2[空×2]我的错!我在简化,结果过度简化了。实际上是[].slice.call{0:a,1:b,length 2}产生了[a,b]。因此,我可以推测,被切片的对象需要提供索引作为键,以便[].slice.call工作?Fanstatic,非常感谢。如果我在一个构造函数中,并且试图使用参数的默认值来填充类属性,该怎么办。假设我有:构造函数public authData={prop1:{key1:3},prop2:{key1:4}。但是,我想要[{key1:4}],而不是{key1:4}?获取对象的Object.values,然后使用.map将每个对象包围在一个数组中,例如.maparr=>[arr]非常感谢。那太有帮助了。我明天会玩这个来确认。非常感谢!