在许多编程语言中,标准的动态列表(非固定大小数组)类型在删除一个项目后会进行调整大小:
Python:
Python:
myList = ['a', 'b', 'c']
del(myList[0])
print(len(myList)) # Prints '2'
C#:
var myList = new List<string> {"a", "b", "c"};
myList.RemoveAt(0);
Console.WriteLine(myList.Count); // Prints '2'
等等。
然而,在Javascript中,即使元素求值为undefined
(这里告诉我它与array[index] = undefined
不同),列表长度仍保持不变:
Javascript:
var myArray = ['a', 'b', 'c']
delete myArray[0]
console.log(myArray.length) // Prints '3'
console.log(myArray) // Prints "[ , 'b', 'c' ]" in node, '[undefined × 1, "b", "c"]' in Chrome
myArray[0] = undefined
console.log(myArray) // Prints "[ undefined, 'b', 'c' ]" on both node and Chrome
myArray.splice(0, 1)
console.log(myArray) // Prints "['b', 'c']"
我的问题是:
- JS数组的
delete
行为是设计上的还是由于担心破坏传统代码而无法修复的疏忽? - 取代被删除的数组元素的“类似未定义”的值具体是什么?