[英]How to optimize this if-else statement in javascript
我有一段這樣的JavaScript代碼
if(prog > 100)
prog = 100;
else if(prog <0)
prog = 0;
else if(typeof prog != 'number')
prog = 0;
看起來很丑陋。 有一些更酷的方法可以用javascript編寫嗎?
prog = Math.max(0, Math.min(100, typeof prog == 'number' ? prog : 0));
這個怎么樣:
foo = typeof foo == "number" ? foo : 0;
foo.constrain(0, 100);
只需將其定義即可:
Number.prototype.constrain = function(min, max) {
return Math.min(max, Math.max(min, this.valueOf()));
}
prog =(prog> 100?100:(prog <0 ||(typeof prog!='number')?0:prog));
if(typeof prog != 'number' || prog < 0){
prog = 0;
} else if (prog > 100) {
prog = 100;
}
prog
不是數字,或小於0時,設定為零馬上蝙蝠 prog
大於100,則設置為100 問題是您正在將變量評估為數字而不知道它是數字(因為您將typeof
檢查放在最后)。 如果我要將foo
傳遞給prog
,則在檢查類型之前您將進行兩次評估。 同樣,您正在為相同的0
輸出評估兩個條件,更好地合並它們。
當JS在條件中看到TRUE
時,不會進一步評估OR
。 當AND
看到FALSE
時,也可以這樣說。
確實應該先測試類型:
if ( typeof prog != 'number' || prog < 0 )
prog = 0;
else if( prog > 100 )
prog = 100;
雙三元:
prog = typeof prog != 'number'?0:prog;
prog = (prog>100)?100:((prog<0)?0:prog);
這是我的看法。 從功能上講,它是簡潔的,但是從現在起12個月后返回代碼時,它並不清晰。
prog = (typeof prog != 'number' || prog < 0 ? 0 : (prog > 100 ? 100 : prog));
這是執行此操作的其他幾種方法。
prog = (typeof prog != 'number' ? 0 : Math.max(0,Math.min(prog, 100)));
prog = (typeof prog != 'number' || prog < 0 ? 0 : Math.min(prog, 100));
我認為這兩個中的第一個可能是最容易理解的。 基本上,如果不是數字,則將其設置為0
,否則確保它在0
到100
之間,這似乎是您真正追求的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.