Kev*_*nis 51
当然.
var arr = [1,2,3,4,5];
arr.prop = 'value';
Run Code Online (Sandbox Code Playgroud)
数组已经是JavaScript中的对象 - 它们只有一些额外的功能和特殊的文字语法.
clo*_*eet 31
正如其他答案所述,这是完全可能的,因为JavaScript中的数组只是对象.然而,仍然存在一个问题,即它是否是一个好主意.
这是一个"编码风格"的问题,因此很难客观地说,但Douglas Crockford对它没有任何问题(至少在某些情况下).在JavaScript:The Good Parts中,他实际上使用了向数组添加"total"方法的示例.
因为数组实际上是一个对象,所以我们可以直接将方法添加到单个数组中:
Run Code Online (Sandbox Code Playgroud)// Give the data array a total function data.total = function () { return this.reduce(add, 0); }; total = data.total(); // total is 108
由于字符串
'total'
不是整数,因此向total
数组添加属性不会更改其长度.
(p62,Crockford的"JavaScript The Good Parts",在Google Books上找到)
但是,值得一提的是,这些额外的属性不包含在JSON序列化中,如果您执行任何操作,它们将被丢弃arr = arr.slice(1);
.
如果您打算将它隐藏在数组等中(至少这就是我正在寻找的):
Object.defineProperty( targ, "myVal", { enumerable: false, writable: true } );
Run Code Online (Sandbox Code Playgroud)
然后数组不会将它添加到长度,所以它是一个属性,而不是我猜你可以说的值。
然后,如果您想查看对象中的键,则 Object.keys 不会看到它,但Reflect.ownKeys()会。
defineProperty 的 Reflect 版本将返回成功或失败,而 Object 的返回传递的对象。
请记住Reflect.preventExtensions()将(如它所说)阻止您或其他人扩展它们。