您没有创建Array 实例! JS 不知道关联数组,它们是对象。当你定义一个非数字的 "index" 时,数组就变成了一个对象,失去了所有像 length 和典型数组方法这样的好东西。
这归结于JS一开始并没有数组,而是后来才引入的。 Array 构造函数实际上只是Object.prototype 的扩充。您可以通过以下几种方式进行检查:
var anArray = [1,2];
for(var index in anArray) console.log( typeof index);
这每次都会记录string,而不是Number,因为在内部数组是一个对象,所以所有数字索引都被强制转换为字符串。
这也解释了为什么您的代码(使用数组作为对象)可以正常工作。
在对象上使用splice 是一个坏主意的主要原因是 ECMAScript 规范没有强制执行给定的属性顺序必须添加到对象中。例如,Chrome 的 V8 引擎会按字母顺序对它们进行排序,但您不保证其他引擎会做同样的事情,因此您的代码会表现得无法预测。
注意:
不要使用new Array,它会时不时地让你大吃一惊:
var someNumber = 213;
var a = new Array();//same as a = [];
var b = new Array(someNumber);// NOT the same as b = [someNumber]
console.log(b.length);//213!!!!
console.log(b);//[undefined, undefined, undefined,....]
var c = new Array(someNumber + '');//THE SAME as b = [someNumber + '']
console.log(c);//['213']
因此,根据您传递给数组构造函数的内容,生成的数组可能与您预期的不同。
至于你的代码,写:
var yourObject = { i1: '9807988',
i2: '9875353',
i3: '9875353'};
delete(yourObject.i2);
//or
delete(yourObject['i2']);
阅读 MDN 上的对象可以做什么