[英]Which Objects in JavaScript have a .length property? (aka Why does Underscore _.each treat my Function Object like an Array?)
[英]why does JavaScript arguments have length property but other objects don't?
为什么下面的代码具有length
属性(特别是通过将参数传递给函数创建的对象):
function somefunction() {
var a = arguments;
return a;
}
var b = somefunction('a','b','c')
b
{'0':'a','1':'b','2':'c'}
b.length个
3
而如果创建了普通对象,则它没有length
属性:
var someobj = {
'0': 'abc',
'1': 'def',
'2': 'efg'
}
someobj.length
未定义
var myObject = {a: "x", length: 5}
也有.length属性。 arguments.length
没有什么特别之处。 好吧,也许它是不可枚举的 ,这就是它没有出现在你的console.log
中可能让你感到困惑的原因。 你也可以重现它:
var someobj = Object.defineProperty({
'0': 'abc',
'1': 'def',
'2': 'efg',
'length': 'whatever'
}, 'length', {enumerable:false});
console.log(someobj); // {0: "abc", 1: "def", 2: "efg"}
console.log(someobj.length); // whatever
正如注释中所提到的,传递给函数的arguments对象是一个类似于Array的对象,它有一个arguments.length方法,这是为了检索传递给函数*的参数个数。 这与Function.length方法不同,后者指定函数预期的参数数量。
function myFunc(param) {
return arguments.length;
}
myFunc('param1', 'param2'); // 2
myFunc.length; // 1
* Javascript语言的功能和动态特性允许将可变数量的参数传递给函数。 为了有效地确定函数参数,我们使用arguments对象。
为了检索对象的长度(它自己的属性),您可以使用Object.keys :
let myObj = {
a: "one",
b: "two"
};
Object.keys(myObj).length; // 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.