【问题标题】:Ternary operator in argument(JavaScript)参数中的三元运算符(JavaScript)
【发布时间】:2021-06-25 20:57:31
【问题描述】:

大家好,这是我第一次尝试在这里问任何问题 我正在阅读 eloquent javascript 书,并且在 第 4 章中看到了这个

function range(start, end, step = start < end ? 1 : -1) {
  let array = [];

  if (step > 0) {
    for (let i = start; i <= end; i += step) array.push(i);
  } else {
    for (let i = start; i >= end; i += step) array.push(i);
  }
  return array;
}

我不明白为什么这段代码需要这个 | = start &lt; end ? 1 : -1 |因为当我们将其更改为 1 时,什么都不会改变(我是如何破解的)。

function range(start, end, step = 1) {
  let array = [];

  if (step > 0) {
    for (let i = start; i <= end; i += step) array.push(i);
  } else {
    for (let i = start; i >= end; i += step) array.push(i);
  }
  return array;
}

已解决:带有 | 的代码1 |当它只有 2 个参数时会出错,所以需要三元运算符

【问题讨论】:

  • 如果 start 大于 end 它将中断。步骤代码可以防止这种情况发生。
  • 糟糕,我没有破解代码 | 1 |当它只有 2 个参数时,没有不起作用的 ternar 运算符。非常感谢社区和所有回答我问题的人

标签: javascript conditional-operator


【解决方案1】:

这意味着“如果start &lt; end,则步骤默认为1,否则步骤默认为0”。

【讨论】:

  • 其他值为 - 1 而不是 0
【解决方案2】:

这个三元运算符是if...else 语句的语法糖。

当你看到类似var result = isTrue == true ? 'is true indeed' : 'not that true';

它与以下内容相同:

var result;
if(isTrue == true) {
    result = 'is true indeed'
}
else {
    result = 'not that true'
}

【讨论】:

  • 不确定这里的“语法糖”——在这种情况下,您字面上无法用 if/else 语句替换该三元组。语句 vs 表达式。
  • “语法糖”是我做的一个糟糕的翻译。语法糖将是正确的翻译。语法糖将被定义为:语法糖是编程语言中的语法,旨在使事物更易于阅读或表达。我所说的语法糖的意思是三元运算符是表达 If/else 语句的另一种方式。我同意它不能直接替换它所在的位置。虽然它可以用“if/else”直接放在函数的开头。语法糖总是可以用它的等效形式代替。
猜你喜欢
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
相关资源
最近更新 更多