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

时间:2016-01-17 16:27:28

标签: javascript

我试图在空语句中搜索好资源,但似乎什么都没有显示出来。即使在MDN,他们也没什么可说的。

即:

for(var i = 0; i < a.length; a[i++] = 0);

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

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

7 个答案:

答案 0 :(得分:2)

无/ lazyness。

绝对没有区别
for(var i = 0; i < a.length;) a[i++] = 0;

的差别很小
for(var i = 0; i < a.length; i++) a[i] = 0;

第一个在几十亿次迭代步骤后快几毫秒;又名。过早优化

修改

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

这根本没有意义,因为它什么也没做。

但表达式如

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

//or maybe sth like this:

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

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

对我来说非常有用,因为它们简短,可读,而且额外的if语句不会为可读性或理解增加任何价值(至少在你知道这种模式后)。

答案 1 :(得分:2)

你给出的例子没有多大意义。他们应该写得更好

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;

但是,空语句有真实的应用程序。我只会列出我想到的3个:

  • function x() {
        …
    };
    

    不属于它的分号(例如在上面的函数声明之后)生成一个空语句。

  • ;
    …
    

    leading semicolon on your script files有助于防止错误包含或文件连接。

  • while (!check_for_finish()); // do nothing
    

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

答案 2 :(得分:1)

第一个显然遍历数组并将所有值分配给零,而不需要在语句中指定代码。

另一个似乎是一个错字,因为它没用。

然而,像

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

会有意义,因为如果b不为零,它会将a指定为零。

var a = 1, b = 1;
if((a == 0) || (b = 0));

alert("a: " + a + ", b: " + b);

答案 3 :(得分:1)

我不认为它们真的有用,但我可能是错的。 可以尝试使用if中的条件评估的副作用,但我没有看到这样做的充分理由。

答案 4 :(得分:1)

我最喜欢的用途是等待条件成真。

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

在我看来,这很好看,但使用{ }而不是空语句也可以这样做。

答案 5 :(得分:0)

第一个示例for(var i = 0; i < a.length; a[i++] = 0);对IMO很有用,原因如下:

  • 在不牺牲可读性的情况下少写。
  • 美女!
  • 告诉别人:嘿,我是职业JS编码员。 :)

第二个if((a==0) || (b == 0));似乎并非一无所获。

答案 6 :(得分:0)

我们假设您有两个函数String mTextValue; Character mLastChar = '\0'; // init with empty character int mKeyDel; myEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { String eachBlock[] = myEditText.getText().toString().split(" "); myEditText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DEL) mKeyDel = 1; return false; } }); if (mKeyDel == 0) { if (((myEditText.getText().length() + 1) % 5) == 0) { myEditText.setText(myEditText.getText() + " "); myEditText.setSelection(myEditText.getText().length()); } mTextValue = myEditText.getText().toString(); } else { mTextValue = myEditText.getText().toString(); if (mLastChar.equals(' ')) { mTextValue = mTextValue.substring(0, mTextValue.length() - 1); myEditText.setText(mTextValue); myEditText.setSelection(mTextValue.length()); } mKeyDel = 0; } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { if (s.length()>0) {// save the last char value mLastChar = s.charAt(s.length() - 1); } else { mLastChar = '\0'; } } @Override public void afterTextChanged(Editable s) {} }); X,让我们假设Y必须仅在Y返回X时执行,你会写的情况:

true