JS代码的简单重构与优化

JS代码的简单重构与优化(适合新手)

原文  http://www.cnblogs.com/similar/p/5016424.html

Demo . 1

//bad
if (age > 20) {
    return true;
} else {
    return false;
}

//good
return age > 20;

这种一看就明白吧,没什么说的。

Demo . 2

//bad
for (var i = 0; i < arr.length; i++) {
    //do something...
}

//good
for (var i = 0, len = arr.length; i < len; i++) {
    //do something...
}

将数组的长度进行存储,循环时就不用每次去读取一次数组长度,从而提升性能

Demo . 3

//bad
if (value !== "") {
    //do something...
}

//good
if (value) {
    //do something...
}

js中所有 非空字符 作布尔运算时,都会返回 true,反之返回 false。 (空格 属于非空字符)

Demo . 4

//bad
if (value !== 0) {
    //do something...
}

//good
if (value) {
    //do something...
}

js中所有 非零 数字作布尔运算时,都会返回 true, 反之返回 false。

Demo . 5

//bad
if (user.id === 10) {
    if (user.name !== "") {
        if (user.email === "email") {
            //do something...
        }
    }
}

//good
if(user.id === 10 && user.name !=="" && user.email === "email") {
    //do something...
}

//good
if (user.id !== 10) return;
if (user.name === "") return;
if (user.email !== "email") return;
//do something...

多层条件嵌套,进行 转换 或 拆分。

Demo . 6

//bad
var a = "aa";
var b = "bb";
var c = "cc";
var d;

//good
var a = "aa",
    b = "bb",
    c = "cc",
    d ;

多个变量的定义,写一个 var 即可,遵循的原则:被赋值的在前面,只是进行声明放后面(d 在最后)

Demo . 7

//bad
for (var i = 0; i < 100; i++){
    str += str;
    document.getElementById("box").innerHtml = str;
}

//good
for (var i = 0; i < 100; i++) {
    str += str;
}
document.getElementById("box").innerHtml = str;

尽可能的减少DOM操作,将DOM操作放在循环体之外,数据处理好后,只执行一次DOM操作即可。

Demo . 8

//bad
 function test() {
     var a = b = 1;
     console.log(a);
 }

 //good
 function test() {
     var a = 1,
         b = 1;

     console.log(a);
 }

避免使用 连等号 声明赋值变量。js基础好点的同学都知道,这里存在着一个坑: b 会被声明为全局变量,意思就是在 test() 方法之外b也是可以被访问到的。  全局变量是不推荐使用的,容易污染环境。

Demo . 9

//bad
if (age > 20) {
    console.log("年龄大于20");
}

//good
(age > 20) && console.log("年龄大于20");

这里的bad并不是说第一种写法不好,其实就可读性来说,第一种比第二种更好。 只是第二种写法更加优雅一点(个人觉得)。 这个句法可能有些同学用的比较少,解释一下:

如果第一个条件为 true ,那么就执行后面的语句,第一个条件为false, 后面的语句便不会执行。后面的语句可以是表达式,方法,或变量,常量都可以。 比如 (age > 20) && test()。用于赋值时的具体说明,如下图

Demo . 10

//bad
if (age > 20) {
    value = "similar";
    //do something...
}

//good
if (age > 20 && value = "similar") {
    //do something...
}

这个可以说是Demo9的变体,代码可读性还是第一个比较好,当你采用第二种写法时,请配合注释使用。因为有些人可能会认为你这是书写失误,少写了一个 = ,从而他自行给你补上了(value == "similar")。而你实际上是想做赋值操作的。因为你要写上注释说明,你这里不是书写失误,而是要进行赋值。

Demo . 11

//bad
if (value === "") {
    value = "similar";
}

//good
if(!value) {
    value = "similar";
}

//good
value = value || "similar";

这个和Demo9的 && 号运算正好相反,当第一个条件为 false 时,执行后面的语句。因为空字符串作布尔运算是返回 false的,所以可以这样用。

Demo . 12

//bad
i = i + 1;
i = i - 1;

//good
i++;
i--;

这个没什么好说的。

Demo . 13

//bad
 if (typeof str === "String") {

 }

//good
 if (typeof str === "string") {

 }

这里只是帮大家填个坑,不存在好坏。typeof 运算是用来检查数据类型的(常用来检查js中的基础类型),它返回的是一个字符串(并且始终为小写),所以第一个始终为false。 检查js中的引用类型要用 instanceof 运算, 如: var arr = [];  if(arr instanceof Array){}, 但 Function 类型比较特别,也可以用 typeof 来进行判断。

Demo . 14

//(bad) 格式化字符串 fontSize => font-size
function stringFormat(str) {
    var strArr = str.split(‘‘),
        len = strArr.length,
        i = 0;

    for (; i < len; i++) {
        if(/^[A-Z]$/.test(strArr[i])) {
            strArr[i] = "-" + strArr[i].toLowerCase();
        }
    }

    return strArr.join(‘‘);
}

//(good) 格式化字符串 fontSize => font-size
function stringFormat(str) {
    return (str.replace(/([a-z])(A-Z)/g, "$1-$2")).toLowerCase();
}

两个方法实现同样的功能,但第二个优雅得多,性能上也比第一个要好。当对字符串进行循环操作,如:查找、替换。 首先考虑的应该是使用 正则,不应该是循环遍历。

Demo . 15

//bad
function regist(userName, userPwd, userEmail, userPhone) {
    //do something...
}

//good
function regist(user) {
    //do something
}

当一个方法接收的参数过多的时候,可以考虑将其封装成一个json对象, 这样简单得多。

Demo . 16

var a = 1,
    b = "1";

//(bad) 输出 a等于b
if (a == b) {
    console.log("a等于b");
}

//(good) 输出 a不等于b
if (a === b) {
    console.log("a等于b");
} else {
    console.log("a不等于b");
}

推荐使用 全等 判断,这样更准确。 字符串和数字并不是全等的。关于比较的一点说明:

目前只想到这么多,麻烦大家进行补充,感谢!

时间: 2024-12-15 17:33:18

JS代码的简单重构与优化的相关文章

浅谈代码重构与优化

浅谈代码重构与优化 前几天看到有一篇不错的文章减少该死的if-else嵌套,觉得写得很不错,整理了一下后准备在团队内部简单分享一下. 写在前面 大家在接手项目的时候,应该有遇到过下面这种结构的代码 if (true) { ..... if (true) { if (true) { .... if (true) { if (true) { ...... } } // do something } // do something if (true) { ......... } } // do som

js日期格式简单转换代码

js日期格式简单转换代码: 未经修饰的东西总是狂野粗糙的,比如人没有经过良好的教育,这人可能会有各种问题,同样js中的时间格式也是如此,所以要对时间进行一定的格式化操作,下面是一段非常简单的代码实例和大家分享一下. 代码如下: function dateStr(x,y) { var z={ y:x.getFullYear(), M:x.getMonth()+1, d:x.getDate(), h:x.getHours(), m:x.getMinutes(), s:x.getSeconds() }

[JQuery]用InsertAfter实现图片走马灯展示效果2——js代码重构

写在前面 前面写过一篇文章<[JQuery]用InsertAfter实现图片走马灯展示效果>,自从写过那样的也算是使用面向对象的写法吧,代码实在丑陋,自从写过那样的代码,就是自己的一块心病,总感觉不完美,心里一直惦记着那件事,也是在我写过那篇文章之后,没多久,在博客园首页看到了一篇文章较复杂js的书写格式,这里的代码看着比较简介,就想着抽时间将之前的那段js代码进行重构.说做就做,不想一想起之前写过那样的代码,心里就有疙瘩.所以也就有了这篇文章. $.extend 在开始重构之前,需要先学习一

JavaScript进阶之路——认识和使用Promise,重构你的Js代码

一转眼,这2015年上半年就过去了,差不多一个月没有写博客了,"罪过罪过"啊~~.进入了七月份,也就意味着我们上半年苦逼的单身生活结束了,从此刻起,我们要打起十二分的精神,开始下半年的单身生活.大家一起加油~~ 一直以来,JavaScript处理异步都是以callback的方式,在前端开发领域callback机制几乎深入人心.在设计API的时候,不管是浏览器厂商还是SDK开发商亦或是各种类库的作者,基本上都已经遵循着callback的套路.近几年随着JavaScript开发模式的逐渐成

最新的JavaScript核心语言标准&mdash;&mdash;ES6,彻底改变你编写JS代码的方式!【转载+整理】

原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructuring 箭头函数 Arrow Functions Symbols 集合 学习Babel和Broccoli,马上就用ES6 代理 Proxies ES6 说自己的宗旨是"凡是新加入的特性,势必已在其它语言中得到强有力的实用性证明."--TRUE!如果你大概浏览下 ES6 的新特性,事实上它

JS 代码调试经验总结(菜鸟必读)

前言:不知不觉写了很多,希望你能耐心看完这篇文章 任何一个编程者都少不了要去调试代码,不管你是高手还是菜鸟,调试程序都是一项必不可少的工作.一般来说调试程序是在编写代码之后或测试期修改Bug 时进行的,往往在调试代码期间更加能够体现出编程者的水平高低以及分析问题的准确度.不少初学者在寻找错误原因时,总是不得要领,花费了大量时间却无法解决一些最终证明是相当简单的Bug. 在长期解答 zTree 相关问题时,也的确发现很多的问题其实不算什么问题,仅仅是编程者不会调试造成的,通过自己日常工作观察,这里

JS代码指导原则

一.什么是平稳退化? 如果含有JS代码的网页在用户浏览器不支持JS(或者禁用JS)时,用户仍然能够顺利浏览(网站功能正常,只是视觉效果可能差一些),那么这个网页就能够平稳退化 网页能够平稳退化是很必要的,因为JS向来名声不好(各种广告,各种弹窗,甚至还有XSS等等阴暗的东西),所以有一个用户群是习惯禁用浏览器的JS支持的,这个用户群可能不大,但是作为编码人员应该尽量让自己的代码尽可能的完善(就像培养自己的孩子一样),我们应该考虑到这种情况,给各种用户完美的体验 如果上面的理由还不够充分,那么可能

javascript代码的小小重构

写js也有那么段时间了,也看过几本关于js的书,从最初的<锋利的jquery><高性能javasrcipt>到<javascript设计模式>等,虽然看了些书,看到了书中的各种理论与技巧,然而在实际的使用中,真正用到的却是不多. js的面向对象与我所熟悉的c#等语言的面向对象稍有不同,但基本都会有封装,继承,多态等.弱语言天生就具备多态性,没有类型检测的js相对而言可以做出许多强类型语言所做不到的灵活,虽然这不能说完全没有坏处,但这个优势让js代码变得丰富多彩. 程序的

JS一般般的网页重构可以使用Node.js做些什么(转)

一.非计算机背景前端如何快速了解Node.js? 做前端的应该都听过Node.js,偏开发背景的童鞋应该都玩过. 对于一些没有计算机背景的,工作内容以静态页面呈现为主的前端,可能并未把玩过Node.js,且很有可能对Node.js都没有一个比较立体的认识——知道这玩意可以跑服务,构建很多前端工具,看上去很厉害的样子,但是,可能就仅限于此了. “那可否三言两语概括Node.js的林林总总呢?” “不可!” “那怎么办?” “那就六言四语!” 首先,要知道,Node.js一个JavaScript运行