JS 黑魔法

一.位运算
1.快速乘/除2:

1<<2//4
1<<10//1024
2<<3//16
16>>2//4

//注意越界问题:
2e9<<1//-294967296
//注意精度:
18>>2//4
1>>6//0

2.切换0和1:

i=1
i^=1//0
i=0
i^=1//1

3.判断奇偶性:

如果结果为1,原数为奇数;如果结果为0,原数为偶数:
7&1//1
8&1//0

4.将数字转换为布尔值:

0转化为false;其他数值均转换为true:
!!7//true
!!0//false
!!-1//true
!!0.71//true

5.取整:

整数向下取整;负数向上取整:
~~11.71//11
11.71>>0//11
11.71<<0//11
11.71|0//11
11.71>>>0//11
~~-11.71//-11
-11.71>>0//-11
-11.71<<0//-11
-11.71|0//-11

//注意:>>>不可用于负数取整
-11.71>>>0//4294967285

6.值交换:

a=7
b=1
a^=b//6
b^=a//7
a^=b//1

//注意:要交换的值必须是整数

7.判定符号是否相同:

如果结果为true,相同;否则,不同:
(12^31)>=0//true
(-12^31)>=0//false
(-12^-31)>=0//true
(1.2^-2.1)>=0//false

8.值是否相等:

如果结果为0,则相等;否则,不相等:
1171^1171//0
11^32//43
11.21^11.21//0

9.是否为2的整数次幂:

如果结果为0,说明是;否则,不是:
n=24
n&(n-1)//16
n=64
n&(n-1)//0

10.代替Math.round():

如果原数>=0,就使用<i>+0.5|0;否则,使用<i>-0.5|0
0+0.5|0//0
Math.round(25)//25
25+0.5|0//25
Math.round(-25)//-25
-25-0.5|0//-25
Math.round(25.5)//26
25.5+0.5|0//26
Math.round(-25.5)//-25
-25.5-0.5|0//-25
Math.round(25.49)//25
25.49+0.5|0//25
Math.round(25.51)//26
25.51+0.5|0//26
Math.round(-25.51)//-26
-25.51-0.5|0//-26
Math.round(-25.49)//-25
-25.49-0.5|0//-25

二.字符串
1.获取随机字符串:

Math.random().toString(16).substring(2,4)//"47"
Math.random().toString(16).substring(2,8)//"74a332"
Math.random().toString(16).substring(2,15)//"1ce311be8ec4f"
Math.random().toString(16).substring(6,15)//"5a0c9b637"

2.使用整数作为分隔条件:

"alpsjadisdl,sas".split(",")//["alpsjadisdl", "sas"]
"alpsjadisdl,sas".split(0)//["alpsjadisdl,sas"]

这样可以节约2B的内存空间

3.创建< a>标签:

使用"<text>".link("<url>"):
"google".link("www.google.com")//"<a href="www.google.com">google</a>"

4.重复字符:

使用Array(<n>).join(<c>):
Array(7).join(0)//"000000"
Array(5).join("d")//"dddd"

注意:重复的次数为<n>-1

三.其他
1.创建随机数:

new Date%100//31//2位随机数
new Date%1000//583//3位随机数
new Date%10000//9239//4位随机数

注意:不要在快速循环中使用,因为时间可能还没有变化

2.替代undefined:

void 0//undefined//性能比直接写undefined要高
''._//undefined
1.._//undefined
0[0]//undefined

3.替代Infinity:

1/0//Infinity
-1/0//-Infinity

4.清空数组:

arr=[0,1,2,3,4,5]
arr.length=0
arr//[]

5.浅拷贝数组:

arr=[0,1,2,3,4,5]
b=arr.slice(0)
b//[0, 1, 2, 3, 4, 5]

6.判断IE版本:

如果为true,则版本不超过IE8;否则,版本不小于IE9:
!+"1"//false

7.for循环条件的简写:

//原版:
for(i=0;i<arr.length;i++){...}
//简写版:
for(i=arr.length;i--;){...}

注意:i--后需要有分号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值