Ответ 1
Этот ~~
является двоичным побитовым оператором NOT.
Он используется как быстрее заменить Math.floor()
.
Я вижу это в некотором коде, и я понятия не имею, что он делает:
var jdn = function(y, m, d) {
var tmp = (m <= 2 ? -1 : 0);
return ~~((1461 * (y + 4800 + tmp)) / 4) +
~~((367 * (m - 2 - 12 * tmp)) / 12) -
~~((3 * ((y + 4900 + tmp) / 100)) / 4) +
d - 2483620;
};
Что делает оператор ~~
?
Этот ~~
является двоичным побитовым оператором NOT.
Он используется как быстрее заменить Math.floor()
.
Он скрывает намерение кода.
Это два одиночных оператора тильды, поэтому он побито дополняет (побитовое) два раза. Операции выходят друг за другом, поэтому единственным оставшимся эффектом является преобразование, которое выполняется до того, как будет применен первый оператор, т.е. Преобразование значения в целое число.
Некоторые используют его как более быструю альтернативу Math.floor
, но разница в скорости не так драматична, и в большинстве случаев это просто микро-оптимизация. Если у вас нет части кода, который действительно нуждается в оптимизации, вы должны использовать код, который определяет, что он делает, вместо кода, который использует побочный эффект нерабочего действия.
При оптимизации механизма JavaScript в браузерах производительность для операторов и функций изменяется. В современных браузерах использование ~~
вместо Math.floor
несколько быстрее в некоторых браузерах, а не в некоторых браузерах. Если вам действительно нужен дополнительный бит производительности, вам нужно будет написать другой оптимизированный код для каждого браузера.
Смотрите: тильда против пола
~(5.5) // => -6
~(-6) // => 5
~~5.5 // => 5 (same as Math.floor(5.5))
~~(-5.5) // => -5 (NOT the same as Math.floor(-5.5), which would give -6 )
Для получения дополнительной информации см.:
Дифференциал очень прост:
Длинная версия
Если вы хотите улучшить читаемость, используйте Math.floor
. Но если вы хотите свести его к минимуму, используйте tilde ~~
.
В Интернете много источников, говоря < <20 > быстрее, но иногда ~~
. Я бы не рекомендовал вам думать о скорости, потому что он не будет замечен при запуске кода. Может быть, в тестах и т.д., Но ни один человек не может увидеть здесь разницу. Что бы быстрее было использовать ~~
для более быстрого времени загрузки.
Краткая версия
~~
короче/занимает меньше места. Math.floor
улучшает читаемость. Иногда тильда быстрее, иногда Math.floor
работает быстрее, но это не заметно.