具有非数字参数的数组拼接方法



我遇到了一个代码,比如:

let array = ['val0', 'val1', 'val2', 'val3'];
array.splice('val0');
console.log(array); // array =[], every element was removed from the array

根据MDN中Array.prototype.splice的定义,这显然是错误的,但在尝试了不同的参数类型,然后显示了不同的结果(如array.splice(true)(后,我有点好奇。但我猜不出到底在做什么,尤其是当参数是一个字符串时,因为NaN转换没有返回某种错误。

请参阅实际的1规范:

  • Array.prototype.splice

    让relativeStart是?ToInteger(起始(。

  • ToInteger
    • 让数字是?ToNumber(参数(
    • 如果数字是NaN、+0或-0,则返回+0
  • ToNumber

    如果语法无法解释String[…],则ToNumber的结果为NaN。

ToNumber('val0')返回NaN,因此ToInteger('val0')返回0。使用array.splice('val0');可以有效地执行array.splice(0);,它将从数组中删除所有元素。使用array.splice(true),您可以有效地执行array.splice(1),它将删除第一个元素之后的所有元素。


[1]虽然MDN是一个很好的资源,但它不是ECMAScript/JavaScript的规范。当您对基本细节感兴趣时,请始终查看实际规格:https://www.ecma-international.org/ecma-262/11.0/index.html

最新更新