从 JavaScript 中的参数中删除参数
Removing an argument from arguments in JavaScript
我想为函数调用提供一个可选的boolean
参数:
function test() {
if (typeof(arguments[0]) === 'boolean') {
// do some stuff
}
// rest of function
}
我希望函数的其余部分只看到没有可选boolean
参数的arguments
数组。我意识到的第一件事是arguments
数组不是数组!它似乎是具有 0、1、2 等属性的标准Object
。所以我不能做:
function test() {
if (typeof(arguments[0]) === 'boolean') {
var optionalParameter = arguments.shift();
我收到一个错误,指出shift()
不存在。那么有没有一种简单的方法可以从arguments
对象的开头删除参数呢?
arguments
不是一个数组,它是一个类似数组的对象。可以通过访问 Array.prototype
在 arguments
中调用数组函数,然后通过使用 .apply()
传递argument
作为其执行上下文来调用它
尝试
var optionalParameter = Array.prototype.shift.apply(arguments);
演示
function test() {
var optionalParameter;
if (typeof (arguments[0]) === 'boolean') {
optionalParameter = Array.prototype.shift.apply(arguments);
}
console.log(optionalParameter, arguments)
}
test(1, 2, 3);
test(false, 1, 2, 3);
我在某些地方看到的另一个版本是
var optionalParameter = [].shift.apply(arguments);
演示
function test() {
var optionalParameter;
if (typeof (arguments[0]) === 'boolean') {
optionalParameter = [].shift.apply(arguments);
}
console.log(optionalParameter, arguments)
}
test(1, 2, 3);
test(false, 1, 2, 3);
正如Arun指出的那样arguments
不是一个数组
您必须转换为数组
var optionalParameter = [].shift.apply(arguments);
这并不花哨,但删除第一个参数而没有副作用的最佳解决方案(不像shift
那样以额外的参数结尾)可能是
for (var i=0;i<arguments.length;i++) arguments[i]=arguments[i+1];
例:
function f(a, b, c, d) {
for (var i=0;i<arguments.length;i++) arguments[i]=arguments[i+1];
console.log(a,b,c,d);
}
f(1,2,3,4); // logs 2,3,4,undefined
相关文章:
- 删除处于抽象状态的参数angular
- JS:删除带有接受参数的处理程序的事件侦听器
- 谷歌应用脚本中的 UrlFetchApp.fetch 删除 url 参数
- getJSON()-如何删除数据参数前面的AND符号
- 可以't获取此函数以删除基于javaScript中后续参数的特定元素
- 使用Javascript从url中删除参数
- 使用正则表达式删除网址参数
- 通过删除一个参数及其值来清理 URL
- 从网址中删除最后一个参数
- 删除元素并将其添加到 javascript 中的函数参数列表中
- 从 JavaScript 中的参数中删除参数
- 删除导致页面刷新出现问题的查询参数
- 删除错误.MongooDB + Express.传入的参数必须是 12 个字节的单个字符串或 24 个十六进制字符的字符
- 从作为参数传入的数组中删除对象不会修改原始数组 (Angular)
- 使用具有多个参数的猫鼬删除/删除
- 使用 jQuery 和 push State 从 URL 中删除 URL 参数
- 如果两个参数都匹配,则从对象中删除重复项
- 删除特定参数
- 按日期参数删除对象
- 将包含对象的 3D 数组展平到 2D 中,通过其参数删除重复的对象