在与if语句相同的行上初始化临时变量

时间:2018-12-13 04:15:20

标签: javascript node.js

我有这个:

const exp = function (input) {
  let v;
  return (v = input.foo.bar) ? v : 'bar' 
};

我想知道,是否可以将临时变量放在同一行上,如下所示:

const exp = function (input) {
  return let v, (v = input.foo.bar) ? v : 'bar' 
};

这是无效的语法。 JS运行时显示“找不到名称v”。

4 个答案:

答案 0 :(得分:2)

考虑使用lodash,例如return _.get(input, 'foo.bar', 'bar');

答案 1 :(得分:2)

无需为简单的内容提供库-如果条件为假,条件运算符将解析第一个表达式,否则将解析第二个表达式,所以为什么不使用||呢?同样的事情,只引用input参数而不声明不必要的附加变量?

const exp = input => input.foo.bar || 'bar';

或者更简洁地说,是通过解构来实现的,尽管它的可读性较差:

const exp = ({foo:{bar}}) => bar || 'bar';

答案 2 :(得分:0)

一行:

const exp = (input) => (v = input.foo.bar) ? v : 'bar'

调用let in函数没有任何意义。如果在内部调用它,则将其初始化。因此您无需检查它是否等于某物。 就您而言,const v应该在函数之外并具有值。

答案 3 :(得分:0)

这对我来说是一个非常愚蠢的问题,我之前已经解决了这个小难题,但是并没有想到。做到这一点的最佳方法大概是:

const exp = function (input) {
  let v = input.foo && input.foo.bar;
  return v || 'bar' 
};