【发布时间】:2023-04-05 17:10:01
【问题描述】:
为什么下面的代码有length属性(特别是通过向函数传递参数创建的对象):
function somefunction() {
var a = arguments;
return a;
}
var b = somefunction('a','b','c')
b
{ '0': 'a', '1': 'b', '2': 'c' }
b.长度
3
而如果创建了普通对象,则它没有length 属性:
var someobj = {
'0': 'abc',
'1': 'def',
'2': 'efg'
}
someobj.length
未定义
【问题讨论】:
-
Arguments 是一个类似数组的对象,所以它有长度。一个普通的对象没有。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 所以 arguments 对象不是普通对象。
-
如果一个普通对象有一个
length,当你想将该属性用于其他目的时你会遇到问题。这不是索引集合的问题。 -
这就是语言的工作方式。数组和类似数组的对象有一个“长度”属性,其中包含数字索引属性的数量。普通物体不会。要找出“为什么”,您需要阅读一些关于语言设计或其他内容的评论,这对您编写 JavaScript 代码没有多大帮助。
-
让 arguments.length 可用才有意义,以便轻松知道通过了多少
-
您使用的是什么浏览器/js环境(版本)?记录参数对象时,我得到了一个非常不同的输出。
标签: javascript object arguments