if (Progress.bar.status == 'finished' || Progress.bar.status == 'uploading'){
//code here
}
如何縮短這個?我想編寫它而不必重複Progress.bar.status
兩次。快捷方式比較語句
線沿線的東西:
Progress.bar.status == ('finished' or 'uploading').
if (Progress.bar.status == 'finished' || Progress.bar.status == 'uploading'){
//code here
}
如何縮短這個?我想編寫它而不必重複Progress.bar.status
兩次。快捷方式比較語句
線沿線的東西:
Progress.bar.status == ('finished' or 'uploading').
我喜歡查找表:
if ({finished:1, uploading:1}[Progress.bar.status]){
//code here
}
此使用對象代碼的兩個或更多的選擇,甚至側面步驟引用的每一個選擇。它也非常快,因爲對象可以緩存並沒有比較的邏輯或方法來調用,只需快速屬性訪問驅動流...
做注意到,在某些情況下,你可能需要使用Object.create(null)
然後如果您絕對必須避免「hasOwnProperty」,「valueOf」,「toString」,「toLocaleString」,「構造函數」和一些雙下劃線擴展的誤報,可以合併/擴展該空白對象與選項。這通常不是一個問題,但需要牢記。如果您可以在不添加if
這些關鍵字的情況下生活,或者從Object.create()構建緩存的選擇集合,那麼這是一種編碼「上述之一」流程的快速而簡單的方法。
請與想要的字符串數組,申請數組的索引的搜索。結果是-1未找到,0..n找到的字符串。使這個短,而我們只需要0 ... N結果,應用按位不結果(https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT) :
value ~value boolean
-1 => 0 => false
0 => -1 => true
1 => -2 => true
2 => -3 => true
and so on
在代碼一起,它看起來是這樣的:
if (~['finished', 'uploading'].indexOf(Progress.bar.status)) {
// code here
}
你能解釋一下嗎? – ozil
@ ozil,我們走吧。 –
我可以建議用枚舉的那麼switch()
聲明:最初
var Status = {
Finished: 'finished',
Uploading: 'uploading'
};
switch (Progress.bar.status) {
case Status.Finished:
case Status.Uploading:
//code here
break;
}
更多的代碼,但更靈活和可讀性。
我知道,擴展原生對象是一個禁忌,但:
String.prototype.eqOr = function(){
var i;
var str = this.toString();
for(i=0; i< arguments.length; i++){
if(arguments[i] === str){
return true;
}
}
return false;
}
if(Progress.bar.status.eqOr('finished', 'uploading')){
//code here
}
V2.0,感謝傑克
String.prototype.eqOr = function(){
return [].indexOf.call(arguments, this.toString()) !== -1;
}
'return [] .indexOf.call(arguments,this)!== -1;':) –
or bake a take-away:'isOk = []。indexOf.bind(['finished','uploading']] );' – dandavis
'Progress.bar.status? ('完成'||'上傳'):'別的東西' –
其他可能的值是什麼? –
@SwarajGiri,這不起作用,因爲任何非空字符串返回true,並強制''完成''返回。但是'//代碼在這裏'的要求不是(不能)實現的。 –