在JavaScript中使用空语句有什么意义?

在JavaScript中使用空语句有什么意义?,javascript,Javascript,我试图在空语句中搜索好的资源,但似乎什么也没有出现。即使是这样,他们也没什么好说的 i、 e: for(var i=0;i

我试图在空语句中搜索好的资源,但似乎什么也没有出现。即使是这样,他们也没什么好说的

i、 e:

for(var i=0;i

我想知道在他们的项目中应该使用空语句的真实例子是什么。这背后的原因是什么?

没有/懒惰。绝对没有区别

for(var i = 0; i < a.length;) a[i++] = 0;
for(var i = 0; i < a.length; i++) a[i] = 0;
这毫无意义,因为它什么都不做

但是表达像

a==0 || (b=0);

//or maybe sth like this:

//var noop = ()=>void 0;  //FYI

typeof a === "function" || (a = noop);

对我来说非常有用,因为它们很短,可读性好,另外一个if语句不会为可读性或理解性增加任何值(至少在您了解此模式之后)。

第一个语句显然会在数组中循环并将所有值赋值为零,而没有在语句中指定代码

另一个看起来像是打字错误,因为它是无用的

然而,类似于

if((a==0) || (b = 0));
这是有意义的,因为如果
a
不是零,它会将
b
赋值为零

var a=1,b=1;
如果((a==0)|(b=0));

警报(“a:+a+”,b:+b)我不认为它们真的有用,但我可能错了。
人们可以尝试在if中使用条件评估的副作用,但我看不出这样做的好理由。

第一个例子是(var I=0;I
在IMO中很有用,原因如下:

  • 在不牺牲可读性的情况下写得更少
  • 美女
  • 告诉人们:嘿,我是一个专业的JS程序员。:)

第二个
if((a==0)| |(b==0))似乎什么都不是。

您给出的示例没有多大意义。最好写下来

for (var i = 0; i < a.length;) a[i++] = 0;
for (var i = 0; i < a.length; i++) a[i] = 0;
; // the comparisons really don't do anything (assuming a and b are no objects)
(a==0) || (b = 0); // Oh wait, that's the one given by @Shomz
if (a != 0) b = 0;
不属于的分号(例如,在上面的函数声明之后)生成空语句

  • 有助于防止错误包含或文件连接

  • 空循环体可用于忙等待循环(不推荐)和类似循环


  • 让我们假设您有两个函数
    X
    Y
    ,并且让我们假设
    Y
    只能在
    X
    返回
    true
    时执行,在这种情况下,您将编写:

    if( X() && Y() );
    

    我最喜欢的用法是等待条件变为现实

    while ( !condition );
    // do what happens once your condition is met
    

    在我看来,这读起来很好,但是同样可以用
    {}
    而不是空语句来完成。

    让我引用for循环上方的代码注释:
    //将所有数组值分配给0
    ,这对您很有帮助。例如,这节省了2个字节,因为您不需要用括号括起来的代码块
    {}
    For(a=0;a++如果(a==0)b=0;
    甚至
    b=(a==0?0:b),您对
    的定义很奇怪
    都更具可读性,这显然不是推荐的做法,也不是我的建议,也不是我要写的东西,而是对问题的回答。条件句中有赋值,可能比你预期的要多。提出更具可读性的变体与此无关,也会让人筋疲力尽。请专注于问题。请请让我强调一下OP的问题:“应该使用空语句的真实示例”对不起,我错过了这一部分,或者是在我写答案时编辑的。你测试过了吗?我很确定它不会更快。是的,这是因为在
    a[I++]=0
    I++(递增并获取I的值)作为一条指令处理,而在
    a[i]=0;i++;
    中,它们是两条;但正如我所说,过早的优化。每个函数调用或未优化的函数,以及更多的函数,对性能的影响都比此优化更大。你说的“指令”是什么意思?你不能只计算JS令牌。不。如果(X())Y,你会写
    ();
    (或
    X()&&Y();
    )。没有空语句。为什么不
    X()&&Y()
    function x() {
        …
    };
    
    ;
    …
    
    while (!check_for_finish()); // do nothing
    
    if( X() && Y() );
    
    while ( !condition );
    // do what happens once your condition is met