美文网首页
javascript 特殊运算符的应用

javascript 特殊运算符的应用

作者: djyuning | 来源:发表于2018-10-07 14:19 被阅读17次

概述

在一个 js 脚本中发现了这样一段代码:

x.fillStyle = '#'+(v(r)*127+128<<16|v(r + u / 3)*127+128<<8|v(r+u/3*2)*127+128).toString(16)

其中出现了 2 个特殊的运算符:<<|,接触 js 很久了,看到这俩货就懵了。查阅后得知,这是位运算操作。

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。—— 百度百科

位运算符是在数字底层(即表示数字的 32 个数位)进行操作的。原则上位运算的效率会比运算符高。位运算需要一定的计算机原理基础,因为它是对二进制内容的操作。本文收集了一些 js 中常用的位运算技巧。

如果想查看一个数的 2 、8、16 进制,可使用下面的方法:

(10).toString(2) // "1010"
(10).toString(8) // "12"
(10).toString(16) // "a"

javascript 的位运算符介绍没有找到,可以参阅 ECMAScript 位运算符

按位非【~】

~undefined // -1
~false // -1
~true // -2
~10 // -11

可以用【~】来查找内容:

var str = 'abc';

str.indexOf('b') // 1
str.indexOf('D') // -1
str.indexOf('b') === -1 // false

~str.indexOf('b') // -2
~str.indexOf('D') // 0
~str.indexOf('c') ? '有' : '无' // 有

// ECMAScript
'abc'.includes('b') // true
'abc'.includes('D') // false
'abc'.includes('a') ? '有' : '无' // 有

取整【|】

运算符前后只要有一个为 1,那么结果都为 1,否则就为 0。通常用来取整,个人感觉只是移除了小数部分。

3.14 | 0 // 3
-3.15 | 1 // -3
-0.003 | 2 // 2
3.14 | 2 // 3
3.14 | 16 // 19

Math.floor(3.1515926) // 3, Math.floor 下舍入
Math.ceil(3.1515926) // 4, Math.ceil 上舍入
Math.round(3.1515926) //, 3 Math.round 四舍五入为整数
Math.round(3.5515926) //, 4

右移运算【>>】

>> 运算符可以获取一个数的 1/2 的值。

12 >> 1 // 6
100 >> 1 // 50
200 >> 2 // 50 = 200/2/2
200 >> 3 // 25 = 200/2/2/2

17 >> 1 // 8, 奇数运算结果错误,此处应为 17/2 = 8.5
9 >> 2 // 2, 结果又是错误的,9/2/2 = 2.25

左移运算【<<】

<< 运算符把 x 的所有位向左移 1 位。

14 << 2 // 56,14 (即二进制的 00001110)向左移两位等于 56 (即二进制的 00111000)

x 的 n 次方【**】

2 ** 3 // 8 = Math.pow(2, 3) = 2 的 3 次幂

字符串转数字【+】

+ 运算符可以把一个字符串转换为数字。

+'123' // 123
+Math.PI // 3.141592653589793
+'abc' // NaN

相关文章

网友评论

      本文标题:javascript 特殊运算符的应用

      本文链接:https://www.haomeiwen.com/subject/wijhaftx.html