如何使用短路对if语句进行编码

时间:2019-06-03 00:41:40

标签: javascript if-statement short-circuiting

我是JavasSript的新手,并且尝试编写带有短路的if语句。

在下面的代码中,第一个试图查看输入是否为1,在控制台页面上显示“ yes”,否则为“ no”。

function checking (input) {
    ((input==1 && return 'yes') || return 'no')
}

但是,由于某些原因,当输入为1时,我会看到“是”和“否”。我尝试通过将return替换为console.log来进行测试:

checking(1); 
function checking (input) {
    ((input==1 && console.log('yes')) || console.log('no'))
}
// output => yes 
// output => no

然后,我发现console.log('yes')返回的是'undefined'。

我该如何解决?

如何将console.log()替换为return?带有return的早期代码会产生语法错误。

2 个答案:

答案 0 :(得分:3)

console.log返回undefined,这是错误的,所以

((input==1 && console.log('yes')) || console.log('no'))
// equivalent to:
((true && console.log('yes')) || console.log('no'))
((true && undefined         ) || console.log('no'))
((        undefined         ) || console.log('no'))

第二个console.log也可以运行,因为第一个括号中的部分的计算结果为假表达式。

我想您可以更改逻辑,以使console.log部分是另一个表达式的一部分,该表达式的结果为true

checking(1); 
function checking (input) {
    ((input==1 && (console.log('yes')) || true) || console.log('no'))
}

但这确实非常奇怪,请改为使用条件运算符:

checking(1); 
function checking (input) {
  console.log(
    input === 1
    ? 'yes'
    : 'no'
  );
}

或者if / else,如果您需要多个语句而不是基于条件的单个表达式:

checking(1); 
function checking (input) {
  if (input === 1) {
    console.log('yes');
    // do something depending on input 1
  } else {
    console.log('no');
  }
}

答案 1 :(得分:1)

您可以使用ternary operator,其用法如下:

function checking(input) {

  return input === 1 ? "yes" : "no";

}

如果value1,那么它将返回"yes",如果没有返回"no"

希望我的回答会有所帮助。