常见写法 | 技巧写法 | |
---|---|---|
bool转换 | var b = 1; Boolean(b); |
!!b |
向下取整 | var b = 1.11; Math.floor(b) |
~~b b>>0 b|0 此写法只适用正数,如果是负数结果不一样Math.floor(-4.2)结果是-5,-4.2>>0结果是-4 |
取整四舍五入 | Math.round(b) |
b+.5|0同样只适用正数 |
转number类型 | var b="123"; Number(b) |
+b |
短路条件 | if(condition){ fun() } |
condition&&fun() |
void 0 | 在某些浏览器null和undefined是可以被赋值更改的 | void 0替代undefined、null使用 |
字符串截取 | "abc".charAt(0) |
"abc"[0] |
数字转字符串 | String(111) |
111+"" `${111}` |
字符串连接 | "A"+"b"+"c" | "".concat("A","b","c") |
一、检查某对象是否有某属性
hasOwnProperty和in的区别
hasOwnProperty: 不检查包括继承链的属性
in: 检查包括继承链的属性
var myObject = {
name:"zhansan"
}
"name" in myObject //true
"valueOf" in myObject //true
myObject.hasOwnProperty("name") //true
myObject.hasOwnProperty("valueOf") //false
二、嵌套优化
取反return
before
function a(){
if(condition){
.....
.....
}
//-------------------------
if(condition2){
doA
}else{
doB
}
}
after
function a(){
if(!condition){
return;
}
.....
.....
//-------------------------
if(condition2){
doA
return;
}
doB
}
三、for优化
看情况使用continue和break,可减少循环次数提高性能。
例如有一个num数组,里面有1-10000的元素;
找出元素为5000的值,并将值赋给copy
var copy;
var num = [1,2,.....,10000];
for(let v of num){
if(v!==5000){
continue;
}
copy = v;
break;
}
如果不加break循环次数为10000次,加了break循环次数仅为5000
四、多维数组扁平化
var arr = [1,[1,2],[1,2,3],4];
console.log([].concat(...arr))//输出[1,1,2,1,2,3,4]