簡體   English   中英

如何在javascript中優化此if-else語句

[英]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));

jsfiddle

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 ,否則確保它在0100之間,這似乎是您真正追求的邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM