如何在未定义上使用/控制错误传播运算符

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 work const 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”

无法使用“in”运算符在未定义中搜索“X”

TypeError:无法使用“in”运算符在未定义中搜索“$__firebase”

即使在未定义检查之后,打字稿“错误 TS2532:对象可能是‘未定义’”

在构建我的 c# 项目时,出现“在未引用的程序集中定义”错误,如何解决?