Что такое оператор" двойная Тильда " ( ~ ~ ) в JavaScript? [дубликат]



этот вопрос уже есть ответ здесь:




  • Что делает ~ ~ ("двойная Тильда") в Javascript?

    9 ответов



Я вижу это в каком-то коде, и я понятия не имею, что он делает:



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;
};


что это ~~ оператор делать?

300   4  

4 ответов:

Это ~~ является двойным не побитовым оператором.

Он используется как быстрее заменить Math.floor().

он скрывает намерение код.

это два одиночных оператора Тильды, поэтому он делает побитовое дополнение (побитовое не) дважды. Операции вынимают друг друга, поэтому единственным оставшимся эффектом является преобразование, которое выполняется до применения первого оператора, т. е. преобразование значения в целое число.

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

обновление 2011-08:

с оптимизацией движка 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. Но если вы хотите свести его к минимуму, использовать Тильду ~~.

есть много источников в интернет, говоря Math.floor быстрее, но иногда ~~. Я бы не рекомендовал вам думать о скорости, потому что это не будет замечено при запуске кода. Может в тестах и т. д., Но ни один человек не может увидеть здесь значение. Что бы быть быстрее-это использовать ~~ для более быстрого времени загрузки.

короткая версия

~~ короче/занимает меньше места. Math.floor улучшает читабельность. Иногда Тильда быстрее, иногда Math.floor быстрее, но это не заметно.

Comments

    Ничего не найдено.