【问题标题】:When I use ' ; 'instead of ' && ', the output changes and I need help understanding it当我使用 ' ; '而不是' && ',输出发生变化,我需要帮助理解它
【发布时间】:2020-01-18 03:08:51
【问题描述】:

当我将 if 语句中的 push 方法之间的 '&&' 替换为 ';' 时,输出会有所不同。请帮助我,以便我可以理解使用分号时的奇怪输出。

var tipcalculator = {
  bills: [124, 48, 268, 180, 42],
  tipmethod: function() {
    this.arraytip1 = [];
    this.arraytipbills = [];
    for (var i = this.bills.length - 1; i >= 0; i--) {
      billsarr = this.bills[i];
      if (billsarr > 200)
        this.arraytip1.push((billsarr * 10 / 100)) && this.arraytipbills.push(((billsarr * (10 / 100)) + billsarr));
      if (billsarr >= 50 && billsarr <= 200)
        this.arraytip1.push((billsarr * 15 / 100)) && this.arraytipbills.push(((billsarr * 15 / 100) + billsarr));
      if (billsarr < 50)
        this.arraytip1.push((billsarr * 20 / 100)) && this.arraytipbills.push(((billsarr * (20 / 100)) + billsarr));
    }
  }
}

tipcalculator.tipmethod()
console.log(tipcalculator.arraytip1)
console.log(tipcalculator.arraytipbills)

【问题讨论】:

  • 当你想在 if 下包含多个语句时,使用 {} 块来包装语句,否则只有第一个语句将绑定到条件,其余的将执行而不考虑条件
  • 谁编写了这段代码,他们想惩罚谁?
  • 您是否尝试过创建开销较小的测试用例来更好地理解您的问题?
  • @Biffen 我是 Javascript 的初学者,我写了它
  • 使用; 你有两个单独的语句,它们都将被执行。对于&amp;&amp;,是否执行第二个表达式取决于第一个表达式是否产生真值。

标签: javascript html css node.js json


【解决方案1】:

如果我将您的代码翻译成更易读的代码,会更容易理解。见下文。

如果您的if 语句是用{} 编写的,那么您的带有&amp;&amp; 的代码将被翻译成这个:

var tipcalculator = {
  bills : [124, 48, 268, 180, 42],
  tipmethod: function() {
    this.arraytip1 = [];
    this.arraytipbills = [];
    for (var i = this.bills.length - 1; i >= 0; i--) {
      billsarr =  this.bills[i];

      if (billsarr > 200){
        this.arraytip1.push((billsarr*10/100))
        &&
        this.arraytipbills.push(((billsarr*(10/100)) + billsarr));
      }

      if (billsarr >= 50 && billsarr <= 200){
        this.arraytip1.push((billsarr*15/100))
        &&
        this.arraytipbills.push(((billsarr*15/100) + billsarr)); 
      }

      if(billsarr < 50){
        this.arraytip1.push((billsarr*20/100))
        &&
        this.arraytipbills.push(((billsarr*(20/100)) + billsarr)); 
      }
    }
  }
}

tipcalculator.tipmethod()
console.log(tipcalculator.arraytip1)
console.log(tipcalculator.arraytipbills)

如果您的if 语句是用{} 编写的,则这是您在翻译时带有; 的代码:

var tipcalculator = {
  bills : [124, 48, 268, 180, 42],
  tipmethod: function() {
    this.arraytip1 = [];
    this.arraytipbills = [];
    for (var i = this.bills.length - 1; i >= 0; i--) {
      billsarr =  this.bills[i];
      
      if (billsarr > 200){
        this.arraytip1.push((billsarr*10/100));
      }
      this.arraytipbills.push(((billsarr*(10/100)) + billsarr));
      
      if (billsarr >= 50 && billsarr <= 200){
        this.arraytip1.push((billsarr*15/100));
      }
      this.arraytipbills.push(((billsarr*15/100) + billsarr)); 
      
      if(billsarr < 50){
        this.arraytip1.push((billsarr*20/100)); 
      }
      this.arraytipbills.push(((billsarr*(20/100)) + billsarr));
    }
  }
}

tipcalculator.tipmethod()
console.log(tipcalculator.arraytip1)
console.log(tipcalculator.arraytipbills)

请注意,当您使用不同的语法(&amp;&amp;;)时,所有三个 if 语句中的操作完全不同。

编辑

如果&amp;&amp; 没有{},则arraytipbills 仅在满足if 条件时运行。

如果; 没有{}arraytipbills始终运行而不管条件如何,因为当if 语句在没有{} 的情况下编写时,只有以下 一个 语句将包含在条件执行中。

附言

每个; 表示语句的结束。

因此,如果您使用 ;,您就是在分隔语句。

如果您使用&amp;&amp;,则您是在比较/继续陈述。

【讨论】:

  • 当我使用 && 运算符并且第一个值结果是 falsy 时,它不会继续进行第二个操作吗?或者它会执行这两个操作吗
  • @HarshShah 和.push 方法的返回值永远不会是虚假的。编辑后的答案中解释了真正的问题。如果您需要进一步解释,请告诉我。
  • 谢谢。我现在更明白了。
【解决方案2】:

一个sn-p

if (billsarr > 200)
    this.arraytip1.push((billsarr * 10 / 100)); this.arraytipbills.push(((billsarr * (10 / 100)) + billsarr));

其实就是

if (billsarr > 200)
    this.arraytip1.push((billsarr * 10 / 100)); // this line is under the 'if' instruction

this.arraytipbills.push(((billsarr * (10 / 100)) + billsarr)); // this line will be executed always

看看for 循环中的代码块是如何用花括号{ } 括起来的? for 指令与if 指令的原理完全相同。

【讨论】:

  • 谢谢。当我使用 && 运算符并且第一个值结果是错误的时,它不会继续进行第二个操作吗?或者它会执行这两个操作吗
  • 一般来说是的。但在这种特定情况下,第一个值 不会 变为虚假。 push的返回值是push后数组的长度,所以至少是1。
【解决方案3】:

使用;用于结束当前语句,后面写的代码;将在 if 条件之外执行。如果使用 {} 大括号,则在内部使用多行。

【讨论】:

  • 谢谢。当我使用 && 运算符并且第一个值结果是错误的时,它不会继续进行第二个操作吗?或者它会执行这两个操作吗
  • 如果第一个值是假的,那么它不会执行第二个语句。但在你的情况下,第一个语句永远不会返回假。
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多