javascript - 非数字参数的数组拼接方法
问题描述
我遇到了这样的代码:
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(开始)。
- 整型
- 让数字是?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
推荐阅读
- python - 我的 pre_save 信号不起作用,因为我想使用此信号更新我的 slug 字段
- cs50 - CS50 pset4 滤镜反射
- mysql - 从sql中的表中获取最后输入的id
- javascript - 通过javascript大量下载图像在IOS中不起作用
- python - 使用带有条件和 NaN 值的 map 函数时出现问题
- elasticsearch - 当 Elasticsearch 中有多个版本时,Update Builder 会延迟响应?
- django - 如何加载 ClearableFileInput / FileField 的初始值(在绑定表单之前)
- html - 如何在一个悬停时切换两个兄弟元素的显示属性?
- jquery - 部分视图中的分页列表
- c++ - OpenGL程序不显示三角形