Зачем реализовывать одну и ту же функцию как в фразе try, так и в catch? - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь понять функцию округления, которую я нашел в унаследованном JavaScript коде:

function percentageWithCommas(x?) {
    try {
        return (x * 100).toLocaleString("en-UK", { 
          maximumFractionDigits: 1, minimumFractionDigits: 1 }) + '%';
    } catch (e) {
        return (x * 100).toFixed(2) + '%';
    }
}

Я понимаю, что округление в JS в настоящее время выполняется с .toLocaleString(...) вместо .toFixed() .

Зачем использовать одну и ту же вещь в фразе try и catch?

Ссылка

1 Ответ

1 голос
/ 21 января 2020

Двойная реализация кажется бесполезной: toLocaleString() имеет высокую совместимость со старыми браузерами, см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

Другая проблема: вам не следует использовать (x?), потому что если x необязательно, у вас будет проблема с null * 100. Вам лучше проверить, является ли x числом, и сделать:

function percentageWithCommas(x) {
    if(isNaN(x)) return '';
    return (x * 100).toLocaleString("en-UK", { 
      maximumFractionDigits: 1, minimumFractionDigits: 1 }) + '%';
}

или что-то в этом роде.

Примечание: Если вы беспокоитесь, что .toLocalString не доступно, вы можете явно проверить его существование с помощью if ((0).toLocaleString).

...