~ является оператором побитовое. Используя его в два раза, некоторые люди говорят, что его оптимизация вместо использования Math.floor
как:
var a = 1.9;
Math.floor(a) === ~~a // true (1 === 1)
Однако 1) Read this answer, чтобы понять, как это достигается, и this performance test видеть, что в некоторых случаев Math.floor()
быстрее. Имеет смысл, что Math.floor()
превзойдет позже, потому что это его цель!
Однако 2) Прочтите this answer, чтобы увидеть различные эффекты на отрицательные числа и некоторые кромки.
var a = -1.5;
Math.floor(a) !== ~~a // true (-2 !== -1)
Однако +)
Math.floor(Infinity) !== ~~Infinity // true (Infinity !== 0)
Однако ++)
Проверьте комментарии, а также, я уверен, что там будут какие-то более интересные аспекты.
Лично я предпочитаю читаемость в таком случае, когда производительность даже не верная. Плюс другие эффекты ... просто используйте Math.floor
это к лучшему!
См. Для более побитовых операторов: mozzila ref и как номера представлены в JavaScript на w3schools.
Если это дубликат, то, что я могу сделать, чтобы сделать q & a? –
Не уверен, где это дубликат. Я не вижу никаких предыдущих вопросов. Ссылка? –
Я вижу его как отмеченный как дубликат с http://stackoverflow.com/questions/4055633/what-does-do-in-javascript –