// 1. 优化1: 不仅方便了解释器,也方便了阅读代码的人 var num = 0, str = "", obj = null, other = void 0; // 2.不要随意地改变变量的类型,初始化是什么类型就是什么类型 var num = 23; // 错误 num = "-" + 2 // 正确,重新申请一个String变量 var sign = "-" + 2 // 3. 函数返回的类型应该确定,而不是一回这样一回那样,如例是很好的 function getPrice(count){ if(count < 0) return -1; else return count * 100; } // ----------------------------------- // 二:减少作用域的查找。这里指的是全局作用域,一般放在局部作用域里面,减少向上查找的浪费 错误:这里的map全局的 <script> map = 12; </script> 我们可以让形成局部 <script> !function(){ map = 12; }() </script> // 这里的! 是将函数声明语句变成了一个函数表达式,是表达式就会在script标签中自动执行,否则匿名函数直接执行会报错 !function(){alert('iifksp')}() // true +function(){alert('iifksp')}() // NaN -function(){alert('iifksp')}() // NaN ~function(){alert('iifksp')}() // -1 // 2. 尽量不用闭包 闭包的作用在于可以让子级作用域使用它父级作用域的变量,将父级的变量保持在内存中! 但是这样一级一级的查找直到全局作用域会很费时间! PS:所谓闭包就是在函数体类再嵌套一个函数,这个函数使用父级函数的变量,然后返回这个子函数 ,称之为闭包函数,这样可以将父级函数的变量暴露出来 错误使用: getResult(count){ count++; process(){ let factor = 2; return count * factor-5; } return process(); } 正确是用法:将count变量直接传递给process函数 getResult(count){ count++; process(count){ return count * factor-5; } return process(count) } // ---------------------------------------------------------- 尽量使用===符号 而不是 == 如果你确定了变量的类型,那么就没必要使用==了 如果类型不确定,那么应该手动做一下类型转换 var totalPage = "5"; if(parseInt(totalPage) === 1){ } 使用==在JSLint检查的时候是不通过的 //----------------------------------------------------------- 合并表达式 getPrice(count){ return count < 0 ? return -1 : count * 100; } 2. 连等(执行顺序是从右到左的) overtime = favhouse = listingDetail = {...} //------------------------------------------------------------ ES6的各种简洁的方法 var nums = [4, 8, 1, 9, 0]; nums.sort(function(a, b){ return b - a; }); var nums = [4, 8, 1, 9, 0]; nums.sort(a, b => b - a); CLASS function Person(name, age){ this.name = name; this.age = age; } Person.prototype.addAge = function(){ this.age++; }; Person.prototype.setName = function(name){ this.name = name; }; class Person{ constructor(name, age){ this.name = name; this.age = age; } addAge(){ this.age++; } setName(name){ this.name = name; } } // 字符串拼接 var url = `/list?page=${page}&type=${type}`; ES6还有其它一些比较好用的功能,如Object的assign,Promise等,也是可以帮助写出简洁高效的代码 ---------------------------------------------------- 一:变量 1. 是否:Boolean is+动词ing/形容词 isLoading isShow 2. 处于状态 +ed/+able disabled editable 是否可以编辑 3. 开关 withTab: '是否带选项卡', checkJs: '检查Js' 二:函数 1. 事件处理 onXxClick/touch/handleXxChange/onXXX onSubmit: '提交表单', handleSizeChange: '处理分页页数改变' onKeydown: '按下键' 2. 异步处理 getXXX/fetchXXX/update getUsers: '获取用户列表', fetchToken: '取得Token', updateUsrInfo: '更新用户信息', createAccount: '创建账户' deleteXx 3. 跳转 toXx 和 goXx toTplDetail: '跳转到模板详情页面', backHome: '回到主页' goHome: '跳转首页', 4. 格式化数据 formatXx/joinXx formatDate: '格式化日期', 三: 数组 options, list, maps, nodes, entities, collection userList: '用户列表', tabOptions: '选项卡选项', stateMaps: '状态映射表',