js函数参数占位符报错问题
经网上搜索,如果函数传入多个值,但是又没有使用第一的值,可以用_
符号进行展位,但是自己写代码时会发现浏览器报错。代码如下
function nameVal(val1, val2) {
console.log(val1, val2)
}
nameVal(_, "second")
报错信息:
该怎么占位呢?
经网上搜索,如果函数传入多个值,但是又没有使用第一的值,可以用_
符号进行展位,但是自己写代码时会发现浏览器报错。代码如下
function nameVal(val1, val2) {
console.log(val1, val2)
}
nameVal(_, "second")
报错信息:
该怎么占位呢?
因为JS没有这个语法,所以不行, 那么_
就是一个普通的变量名但是没有定义因此就报错了, 如果要跳过一般是nameVal(undefined, "second")
或nameVal(null, "second")
, 不过为什么要这样写代码呢??
JS 没有这个语法吧。
参考这个:JS有没有参数占位操作?
如果传入参数数量不确定,可以把参数放在 object 中传入。
使用 object 方法的话,不需要考虑传入参数的次序问题。
/**
*
* @param {object} options 参数配置
* @param {string} options.param1 参数 1
* @param {string} options.param2 参数 2
* @param {boolean} options.param3 参数 3
*/
function test(options) {
if (options.param1) {
// ...
}
if (options.param2) {
// ...
}
if (options.param3) {
// ...
}
}
test({param1: '0001', param2: '0002', param3: true});
test({param1: '0001', param2: '0002'});
test({param2: '0002'});
test({param2: '0002', param1: '0001'});
你这个占位符的意义是什么呢?应该也是表示undefined或者null吧,那么,你可以用以上两者去占位,效果是一样的,否则,你在函数内部如何处理这个下划线呢,表示undefined还是null你总得选一个吧,所以,这种占位符还有什么意义呢?一楼和二楼分别给出的两种方案都是可行的,object的方式比较适合参数较多或者比较正式的写法,而非object的方式适合参数少、节奏快的情境,酌情使用。
印象中有用下划线作为函数参数占位符的工具库有underscore和lodash,这些库之所以支持这种写法是因为预先定义并导出了“_”这个变量,且在函数的实现中做了一系列判断操作,例如你题中的函数要实现这个功能可以这么写:
const _ = {};
function nameVal(...val) {
for (let i = 0; i < val.length; ++i) {
if (val[i] === _) continue;
// do something...
}
console.log(...val);
}
nameVal(_, "second");
8 回答5.8k 阅读✓ 已解决
9 回答9.2k 阅读
6 回答4.7k 阅读✓ 已解决
5 回答3.5k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
7 回答9.8k 阅读
5 回答7.1k 阅读✓ 已解决
占位符的场景,无非就是 函数中 某个参数是非必填的
要注意
_
没有这个语法,会默认把它当成一个变量的参数;可以尝试以下几种方案:
1: 必填项放置开头,非必填放置最后
2: 设置默认值
3:解构