JS写法技巧

  常见写法 技巧写法
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]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容