Есть ли более короткие и хитрые коды в javascript?

Я нашел следующие короткие и хитрые коды на

Двойное побитовое НЕ (~~) – Джеймс Падолси
http://james.padolsey.com/javascript/double-bitwise-not/

Web Reflection: два простых трюка в JavaScript (старые, но всегда полезные )
http://webreflection.blogspot.com/2008/06/two-simple-tricks-in-javascript-olds.html


двойное побитовое не

Math.round(v) === ~~v

Math.floor(v) === ~~v (если v > 0)

isNaN(Number(v)) ? 0 : Number(v) === ~~v(если v не число с плавающей запятой)


double not

Boolean(v) === !!v

(!Boolean(v) === !v)

побитовый сдвиг

Math.round(v / 2) === v >> 1

Math.round(v) === v >> 0


один побитовый не

a.indexOf(v) !== -1 === ~a.indexOf(v)


Есть ли в javascript более короткие или хитрые коды?


person js_    schedule 23.05.2011    source источник
comment
Чего вы добиваетесь, используя эти приемы? Я предлагаю вам придерживаться стандарта Ecmascript. Некоторые трюки возможны в Ecmascript.   -  person mozillanerd    schedule 23.05.2011
comment
~~v не может не быть эквивалентным как Math.round(v), так и Math.floor(v), учитывая, что round() и floor() не делают одно и то же. Но даже если предположить, что это эквивалентно той или иной математической функции с использованием ярлыка ~~, это только усложнит чтение вашего кода. Как вы думаете, кто-то еще, читающий этот код, автоматически поймет, что Math.floor() был предполагаемым эффектом?   -  person nnnnnn    schedule 23.05.2011
comment
спасибо ваши комментарии. я просто хочу сделать свои коды сложными (но простыми и совместимыми с разными браузерами). весело писать код свободно. но это сложная проблема. если вы знаете, что ~~, !! или ~-1 означает, что и читаемость, и записываемость кодов лучше, чем обычными способами. разве невозможно, чтобы каждый программист javascript знал эти трюки, как каждый программист знает &&, !, ++ и т. д.?   -  person js_    schedule 23.05.2011
comment
@mozillanerd, какие из них несовместимы со стандартом Ecmascript?   -  person js_    schedule 23.05.2011
comment
@MuhammadUmer нет, не знал.   -  person js_    schedule 11.07.2013
comment
Полезная ссылка на случай, если кому-то это тоже понравится. stackoverflow .com/questions/3899495/   -  person Muhammad Umer    schedule 07.08.2013
comment
Math.round(2.6) //3 НЕ РАВНО ~~2.6 //2   -  person Muhammad Umer    schedule 24.08.2013


Ответы (1)


Эти «трюки» не относятся к Javascript. Простой поиск в Google выдаст несколько страниц, предлагающих похожие трюки.

http://resnet.uoregon.edu/~gurney_j/jmpc/bitwise.html

http://lab.polygonal.de/2007/05/10/bitwise-gems-fast-integer-math/

http://www.beyond3d.com/content/articles/8/

person Craig White    schedule 23.05.2011