为什么在使用三元运算符时如果条件放在第一括号内不起作用?

时间:2018-07-31 13:16:41

标签: javascript

if条件放在第一括号内会导致错误:

function fd(t) {
  let output = '';
  if (t >= 41) {
    let mns = 45
    (mns === 1) ? (output = "true") : (output = "false");
  }
  return output;
}

console.log(fd(65));

  

错误消息:“ ReferenceError:无法访问词法声明'mns'   初始化之前”

if条件没有第一个括号就可以了:

function fd(t) {
  let output = '';
  if (t >= 41) {
    let mns = 45
    mns === 1 ? (output = "true") : (output = "false");
  }
  return output;
}

console.log(fd(65));

有人可以向我解释这种行为吗?

2 个答案:

答案 0 :(得分:2)

您在let mns = 45之后缺少分号来结束该语句。没有分号来结束该语句,就好像试图将(mns === 1)作为参数传递给let语句一样。好像这两行合并为一个:let mns = 45(mns === 1) ? (output = "true") : (output = "false");

第二个功能起作用是因为msn === 1周围没有括号,因此它不会尝试将其作为参数传递给let语句。

通常,请始终记住在每个 JavaScript语句之后添加分号。

function fd(t) {
  let output = '';
  if (t >= 41) {
    let mns = 45;
    (mns === 1) ? (output = "true") : (output = "false");
  }
  return output;
}

console.log(fd(65));

正如Xufox在评论中建议的那样,您可以将三元运算符移至return语句,以避免产生歧义。

function fd(t) {
     let mns;
      if (t >= 41) {
        mns = 45;
      }
      return (mns === 1) ? ("true") : ("false");
}

console.log(fd(65));

答案 1 :(得分:1)

发生这种情况是因为let声明尚未结束。要结束声明,请使用;或声明为var而不是let。

function fd(t) {
  let output = '';
  if (t >= 41) {
    let mns = 45;  // note the semicolan or declare it as var
    (mns === 1) ? (output = "true") : (output = "false");
  }
  return output;
}

console.log(fd(65));