zhengrenzhe's blog   About

JS中与箭头有关的一些东西

js中的大于小于号 >< 经常会被用到,但你以为他们只能作为判断大小的符号吗?他们还可以做更多的事情。

判断大小

>, >=, <, <=

这是它们最常被用到的功能,这时这两种符号可以与= 结合,变成大于等于或小于等于。

console.log(1 < 10); // true
console.log(10 >= 1); // true

左移

<<

左移操作可以将数的所有二进制位向左移动指定的位数。

console.log(2 << 3); // 16

2的二进制为10,每一位左移三位,用0来填充空位,变成了10000,所以就成了16。但是,左移不会影响数字的符号位,所以将-2左移三位,是-16,而不是16。

有符号右移

>>

有符号右移与左移的概念相同,相当于左移的逆操作。有符号右移会保留符号位,空位用符号位的值填充。

console.log(8 >> 2); //	2
console.log(-8 >> 2); // -2

无符号右移

>>>

无符号右移与有符号右移的规则基本相同。对于正数来说,无符号右移与有符号右移的值相同

console.log(8 >> 2); // 2
console.log(8 >>> 2); // 2

但对于负数来说就不同了,首先无符号右移的空位是用0填充的,而不是像有符号右移那样用符号位填充,而且无符号右移会把这个二进制码当成正数的二进制码,这样结果就会造成很大的偏差。

console.log(-8 >>> 2); // 1073741822

-8对应的32位二进制数:

1111 1111 1111 1111 1111 1111 1111 1000

有符号左移后

0011 1111 1111 1111 1111 1111 1111 1110

所以就成了1073741822。

左移/有符号右移/无符号右移 赋值

<<=, >>=, >>>=

这三者的作用与+= 这类的操作符作用相同,用于简化复制操作而已。

var a = 2;
a <<= 2; // 8

单行注释

<!--

如果说上面的还算是常规用法,这一条可就是鬼畜级的用法了。

在各种js教程中都说过,js接受两种风格的注释:用//标识的单行注释以及用/**/标识的多行注释。但其实它还有第三种注释方法,就是像html注释那样的<!--,只不过它只取了html注释的前半部分,并不需要后半部分-->

这在js中确实是有效的。

<!-- alert('wtf'); // 什么都不会发生

这行代码并不会被执行,因为他已经被注释掉了。这在浏览器中是可用的,在node环境中也是可用的。不过它只是单行注释而已。

趋向于

-->

这下可把html的注释凑齐了。上面说到html的注释的前半部分在js中作为注释使用,而他的后半部分是另外一个功能,表示趋向于。

var m = 10,
	n = 10;
while(n --> 5){
	console.log(n);
}
m --> 0;
console.log(m); // 9

这将依次输出 9, 8, 7, 6, 5。-->每次只会运算一次,所以m为9。

箭头函数

=>

这是es6中的一个新特性,在各种es6教程中都出现过很多次了,也比较好理解。

var fun = e => ++e;
console.log(fun(2)); // 3

与箭头有关的差不多就是这些了,一共有这么多:

<, >, <=, >=, <<, >>, >>>, <<=, >>=, >>>=, <!--, -->, =>。还真挺多的==。

← JavaScript中的this  前端音频处理的超级无敌终极大法-WebAudio →