Принуждение к количеству - программирование
Подтвердить что ты не робот

Принуждение к количеству

Я часто видел трюк

after = +after;

чтобы принудить переменную after к числу. Чтение через Node.JS source Я нашел другой метод:

after *= 1; // coalesce to number or NaN

Являются ли эти два метода строго эквивалентными по своему поведению?

4b9b3361

Ответ 2

После быстрого google, чтобы убедиться, что мои подозрения верны, я пришел к такому выводу. Использование оператора + для преобразования в число выполняется быстрее, потому что после литья типов не выполняются математические операции, тогда как использование подхода *= означает, что после преобразования after оно будет умножено на 1.

Ответ 3

Примечание. В некоторых случаях after = after-0 вызывает различное поведение, чем after = after+0. Я заметил это с датами.

Это тестирование только в Chrome v39:

var date = new Date(2000,0,1);
date += date; //"Sat Jan 01 2000 00:00:00 GMT+0000 (GMT Standard Time)Sat Jan 01 2000 00:00:00 GMT+0000 (GMT Standard Time)"
var date2 = new Date(2000,0,1);
date2 + 0; //"Sat Jan 01 2000 00:00:00 GMT+0000 (GMT Standard Time)0"
date2 - 0; //946684800000
date2 * 1; //946684800000

Я не знаю, что определено в спецификации JS, но с датами, потому что и дата, и число могут быть переданы в строку, а оператор + работает с строкой, тогда Chrome идет с конкатенацией строк, Поскольку оператор-оператор не имеет эквивалента строки, он возвращается к сопоставлению чисел.

Я нашел, что это полезно, когда вы вводите даты в числа для сравнения

Ответ 4

Да, однако обратите внимание, что это только оператор унарного+. То есть 10 + "10" предоставит вам "1010".

Возможно, менее вероятный вариант ошибки - использовать то, что делает asm.js:

10 + ("10"|0)

Хотя на нижней стороне это требует скобки. Это должен быть самый быстрый вариант в любом случае (вероятно, равный унарному +).