【发布时间】:2015-11-24 20:48:44
【问题描述】:
我知道更改数组大小的通用方法是使用.push()。
然而,今天我在 angularJS 中看到了一段代码,它做了这样的事情:
var service = {
pages: [],
doSmth: doSmth
};
doSmth();
function doSmth() {
service.pages[1] = "abc";
service.pages[5] = "def";
}
我在浏览器上运行调试器,发现在调用doSmth()之前,pages[1]是未定义的,但之后,pages[1]被赋值,没有任何错误。
这怎么可能?
【问题讨论】:
-
因为页面已经在 pages: [] 中初始化。如果没有 pages:[],您会看到未定义的错误。
-
将值分配给等于或超过数组长度的索引将调整其大小以适应。
-
您期望什么行为?记住
function doSmth被提升了 -
您总是可以在数组的任何索引处添加一个元素,它会“调整大小”(只要长度看起来是最大索引 + 1)以适应。
push函数只是为了方便给myarray[myarray.length]添加一个元素 -
@PTN:Javascript 中没有 OutOfBounds。
标签: javascript angularjs