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语句的范围
我把这些放在一起演示(稍作修改)。简短回答:否。
长答覆:
@Stevex&&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!');
}