本文主要是对刷题过程中遇到的一些技巧进行总结。
js中的>>和>>>运算符
js中的>>表示有符号位移,>>>表示无符号位移,当操作一个正数的时候,两者无差别。
1 | 10>>1 |
因为10的二进制是1010,向右移动一个就是101,十进制里代表5
但是如果是对于负数,相差就很大
1 | -2>>1 |
-2在计算机中是以补码存在(补码=反码+1),也就是11111111111111111111111111111110(32位,4个字节)
1.如果是>>1,表示有符号的位移,右面移去了一个0,左面补充了一个1
2.如果是>>>1,表示无符号的位移,右面移去了一个0,左面补充了一个0(无视正数,负数,一直补充0,即把有符号数转为无符号数字),变成01111111111111111111111111111111,现在变成了一个正数(首位数0表示正,1表示负数),就是2147483647。
n | 0 和0的位或运算
可以用于返回32位带符号整数。
a**b
a的b平方
深拷贝
arr.slice(start, end)
返回一个数组的一段
可使用负值从数组的尾部选取元素。
如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。
arr.concat()
连接两个或多个数组
利用JSON.stringify和JSON.parse
只针对json数据这样的键值对有效
js遍历数组的方法
由于数组内部属性值为引用对象,因此使用slice和concat对对象数组的拷贝,整个拷贝还是浅拷贝,拷贝之后数组各个值的指针还是指向相同的存储地址。
因此,slice和concat这两个方法,仅适用于对不包含引用对象的一维数组的深拷贝(一般数组对象现在没什么问题)
1 | function deepCopy(arry1, arry2){ |
- 本文作者: Raphael_Li
- 本文链接: https://lifei-2019.github.io/interview6/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!