Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是<;布尔表达式>&&;语句()是否与if(<;布尔表达式>;)语句()相同?_Javascript_Syntax_If Statement_Boolean_Syntactic Sugar - Fatal编程技术网

Javascript 是<;布尔表达式>&&;语句()是否与if(<;布尔表达式>;)语句()相同?

Javascript 是<;布尔表达式>&&;语句()是否与if(<;布尔表达式>;)语句()相同?,javascript,syntax,if-statement,boolean,syntactic-sugar,Javascript,Syntax,If Statement,Boolean,Syntactic Sugar,这两个是相同的吗 假设你有: var x = true; 然后你有一个: x && doSomething(); 或 这两种语法有什么不同吗?我是不是偶然发现了一点糖?严格地说,它们会产生相同的结果,但如果你将前一种情况作为其他情况的条件,你会得到不同的结果。这是因为在x&&doSomething()的情况下,doSomething()将返回一个值来表示其成功。否,它们不相同。如果是语句,则和运算符是表达式 这意味着您可以在其他表达式中使用其结果,但在if语句中无法使用: v

这两个是相同的吗

假设你有:

var x = true;
然后你有一个:

x && doSomething();


这两种语法有什么不同吗?我是不是偶然发现了一点糖?

严格地说,它们会产生相同的结果,但如果你将前一种情况作为其他情况的条件,你会得到不同的结果。这是因为在
x&&doSomething()
的情况下,
doSomething()
将返回一个值来表示其成功。

否,它们不相同。如果
是语句,则
运算符是表达式

这意味着您可以在其他表达式中使用其结果,但在if语句中无法使用:

var result = x && doSomething();

然而,在你的例子中,两者都有相同的效果。使用可读性更好、更能代表您的程序结构的程序;我建议使用if语句。

总之,不,这两种语句并不相等,尽管在特定情况下,您给出的结果是相同的

x&&doSomething()
是一个表达式,首先计算
x
,因为这是一个表达式,并且由于
x
为真,因此第二个参数(
doSomething()
)随后被计算。在这种情况下,这意味着执行该方法。如果
x
为false,则不会执行doSomething(),因为表达式的结果不能为true

if(x)doSomething()是一条语句。检查x的值,如果为true,则执行if语句的范围

我把这些放在一起演示(稍作修改)。

简短回答:否。 长答覆: @Steve
x&&doSomething()
所述的A是一个表达式

if(x)doSomething()语句

根据@Daniel Li和@Bergi的建议,思考:

  • 计算一个表达式(此处应返回一个

  • 声明了一个语句(应该返回一个值,在这里,思考副作用

为什么会让人困惑?
  • JS允许我们编写
    (该表达式)
  • JS允许我们编写
    that表达式
两者都假设某种类型的
不使用value of
语句

如何选择? 您是否使用:

  • doSomething()
    作为
    • 表达式,考虑
      IsMyObjectWhatever()
      MyObjectComputedValue()
    • 或者作为一句话,想想
      ModifyMyObject()
然后:是否使用
x&&doSomething()
作为表达式

你最终会想到类似于
这个语句(那个表达式)无处不在,想想:

  • ()
    表达式
  • 语句
那我为什么要选择呢?
  • 很明显,“它有效”并不代表“它是对的”

  • 如果在时不太明显,则会产生不同:

    • 想想看,
      (())
      可以是正确的
      (;)
      是错误的
    • 检查@wwaaw
    • 让我们扮演侦探

      我们将第一种方法称为条件箭头调用,第二种方法称为传统If-Else

      我们将在中创建两个单独的案例来评估这两种方法的公平性

      条件箭头调用 操作/秒结果:

    • FireFox:65152
    • 电话:129045
    • 传统的如果不是 操作/秒结果:

    • FireFox:65967
    • 铬:130499
    • 结论 正如您所看到的,从性能上看,这并没有太大的区别,但是传统的If-Else在大多数情况下都以微不足道的小数目战胜了条件箭头调用。这可能与动态创建隐式函数有关

      我还意识到Chrome的JavaScript比FireFox的JavaScript执行速度快得多

      这里是jsperf链接,您可以运行它来自行评估


      在您的情况下,结果将是相同的。您是否缩小了代码?如果是这样,不要这样做。编写清晰易读的代码,让缩略器负责调整。@user1689607我个人认为前者更简洁/优雅/可读,假设其语义相同。所有表达式都作为独立语句有效吗?我可以将语法用于其他类型的语句吗?反正都是表达,不是吗?我的意思是,
      var x;&&x='布尔表达式为真'。如果(条件)
      遵循
      &&
      的任何语句,即使不涉及方法调用,也能产生相同的结果吗?任何计算结果为值的表达式都可以包含在布尔运算中。js表达式中的不是所有语句,尽管如此?请参阅@AdrienBe:这些链接应该告诉我什么?对于有兴趣了解更多关于javascript
      语句
      表达式
      的人,请进一步阅读,如差异、关键字等
      var result = x && doSomething();
      
      const VALUE = true;
      const TEST = false;
      
      //test 1
      VALUE && !TEST && (() => {
          console.log('print me!');
      })();
      
      const VALUE = true;
      const TEST = false;
      
      //test 2
      if(VALUE && !TEST) {
          console.log('print me!');
      }