首页 > 解决方案 > 非数字参数的数组拼接方法

问题描述

我遇到了这样的代码:

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 转换没有返回某种错误。

标签: javascript

解决方案


见实际1规格:

  • Array.prototype.splice

    让 relativeStart 成为 ? ToInteger(开始)。

  • 整型
    • 让数字是?ToNumber(参数)。
    • 如果 number 为 NaN、+0 或 -0,则返回 +0。
  • 到编号

    如果语法无法解释 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


推荐阅读