如何在未定义上使用/控制错误传播运算符
Posted
技术标签:
【中文标题】如何在未定义上使用/控制错误传播运算符【英文标题】:How to use/control errors spread operator on undefined 【发布时间】:2017-01-17 12:46:48 【问题描述】:我定义了以下函数
const fn = (a) => (console.log(...a));
当我使用参数调用函数时,它可以完美运行:
fn(['asd','fgh']) // prints 'asd fgh'
但是,有没有办法用 undefined 来调用它?
fn() //Uncaught TypeError: undefined is not iterable(…)
我能想到的唯一解决方案是在函数的开头用一个检查它
if (a === undefined) a = '';
有什么方法可以让“...a”返回 ' ',例如?
【问题讨论】:
const fn = (a) => (console.log(a && ...a)) Uncaught SyntaxError: Unexpected token ... doesn't workconst fn = (a) => (console.log(...a || ''));
效果很好,谢谢!
@Rayon:这会传播空字符串,这可能相当不直观。更好地使用...a || []
@Bergi - 同意...我只是粗略地考虑了预期的结果..
【参考方案1】:
您可以使用默认参数。如果在函数调用中没有传递任何值,您可以设置每个参数将具有的值。
let fun = (a=3) => console.log(a);
fun(4); //4
fun(); //3
【讨论】:
【参考方案2】:另一种选择是(如果它必须是单线):
fn = a => a!==undefined && typeof a[Symbol.iterator] === 'function'? console.info(...a) : console.info('');
fn(); // result ''
fn(1); // result ''
fn([1,2,3]); // result 1 2 3
如果 iterator 部分没有问题:
fn = a => a!==undefined ? console.info(...a) : console.info('');
fn(); // result ''
try
fn(1);
catch(e)
console.info("told you:" + e);
; // throws an error
fn([1,2,3]); // result 1 2 3
【讨论】:
或者只是fn = (a = ['']) => console.info(...a)
是的,我不想发布它,因为它是 krizzus 的回答以上是关于如何在未定义上使用/控制错误传播运算符的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的类型错误:无法使用“in”运算符在未定义中搜索“scrollLeft”
Mongoose TypeError:TypeError:无法使用“in”运算符在未定义中搜索“pluralization”
TypeError:无法使用“in”运算符在未定义中搜索“$__firebase”