我试图在空语句中搜索好资源,但似乎什么都没有显示出来。即使在MDN,他们也没什么可说的。
即:
for(var i = 0; i < a.length; a[i++] = 0);
if((a==0) || (b == 0));
我想知道在他们的项目中应该使用空语句的一些真实示例。它背后的原因是什么?
答案 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很有用,原因如下:
第二个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