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,并强制''完成''返回。但是'//代码在这里'的要求不是(不能)实现的。 –