какие недостатки в приведении строки-целого числа к целому в Javascript с (1 * x)? - PullRequest
3 голосов
/ 28 октября 2011

, если вы сравниваете разные явные методы приведения типа переменной к целому числу:

var y = parseInt(x,10) + 'text'; // слишком долго, нужно обёртывание, нужен антиоктальный взлом

var y = x.toFixed(0) + 'text'; // еще долго, и еще страшнее, и, возможно, глючит

var y = Math.floor(x) + 'text'; // long и использует объект Math

var y = Number(x) + 'text'; // long

var y = +x + 'text'; // очень короткий, но слишком хакерский

var y = 1 * x + 'text'; // простой и короткий

Вы увидите, почему последний мой любимый. Интересно, а есть ли скрытые проблемы с этим методом?

Ответы [ 2 ]

5 голосов
/ 29 октября 2011

Последний действительно работает:

1 * 0.5; // 0.5

, если вы хотите наилучшую читабельность, используйте parseInt.И основа не хак!

Редактировать:

Мой любимый:

var y = x|0 + 'text';

Изменить: Обратите внимание, что этот «трюк» работает только с 32-разрядными знаковыми целыми числами.Потому что это реализация JavaScript, это битовая логика.Таким образом, наибольшее положительное число, для которого вы можете использовать это значение, равно 2147483647.

Существует одна операция без знака, беззнаковое смещение вправо.0 >>> 1

1 голос
/ 29 октября 2011

Я считаю, что код должен быть сначала корректным, а затем как можно более читаемым, как можно больше людей, и, наконец, не дольше, чем требуется.В этом ключе, вот мои предпочтения:

Для преобразования из строки в целое число я предпочитаю:

parseInt(x, 10)

, потому что я думаю, что код говорит именно то, что вы пытаетесь сделать.Если вам не нравится дополнительный параметр, вы можете определить свою собственную глобальную служебную функцию:

toInt(x) {return(parseInt(x, 10));}

, чтобы вы могли просто использовать:

toInt(x)

Когда я просто хочу включитьЯ предпочитаю строку в число:

Number(x)

, потому что, опять же, я думаю, что это наиболее явный и самый читаемый текст.

В других ваших примерах x.toFixed(0) не работает, еслиx - это строка, а Number(x), +x и 1*x не преобразуются в целое число.

...