js简洁优美写法技巧
作者:秋了秋 发表时间:2016年09月30日
1.压缩稀疏数组: bad:
var a=[2,5,undefind,6,8,undefined,9];
function (){
var b=[];
for(var i=0;i<a.length;i++){
if(a[i]!=undefined){
b.push(a[i]);
}
}
return b;
}
good:(数组过滤,只返回真值元素)
var a=[2,5,undefind,6,8,undefined,9];
a=a.filter(function(){
return true;
});
2.判断真假 bad:
if (result !== null || result !== undefined || result !== '' || result !== false || result !== 0) {
//do somthing
}
good:(所有null,undefined,空,false,0都是假)
if (result) {
//do somthing
}
3.实例化对象 bad:
var a = new Array();
var b = new Object();
var c = new String("秋叶");
good:(字面量写法简洁且更容易理解)
var a = [];
var b = {};
var c = "秋叶";
4.单一判断 bad:
if (result) {
console.log("秋叶");
}
if (!result) {
console.log("秋叶");
}
good:
result && console.log("秋叶");
result || console.log("秋叶");
5.条件选择 bad:
if(result=="yes"){
a="111";
}else{
a="000";
}
good:(简单的三元表达式比if更好~)
a=result=="yes"?"111":"000";
6.for循环 bad:
for (var i = 0; i < arr.length; i++)
good:
for(var i in arr)
7.文本框输入触发 bad:
document.getElementById("input").onkeyup(function(){
console.log("输入内容了");
});
good:(解决keyup键盘触发不能捕捉鼠标粘贴进去的动作)
document.getElementById("input").oninput(function(){
console.log("输入内容了");
});
8.函数返回 bad:
function test(){
var test=false;
var obj=[{content:0,detail:"hahaha"},{content:1,detail:"yes"},{content:0,detail:"no"}];
for(var i=0;i<obj.length;i++){
if(obj[i].content==1){
test=true;
}
}
return test;
}
good:(提前返回结束循环,避免做没必要的工作)
function test(){
var test;
var obj=[{content:0,detail:"hahaha"},{content:1,detail:"yes"},{content:0,detail:"no"}];
for(var i in obj){
if(obj[i].content){
return true;
}
}
return test;
}
9.判断元素是否在数组中 bad:
var a=[48,56,65,77,6,80,92];
for(var i in a){
if(i===6){
console.log("包含6");
}
}
good:
var a=[48,56,65,77,6,80,92];
a.indexOf(6)>-1 && console.log("包含6");
10.做好后备工作 bad:
var script=document.createElemnt("script");
script.setAttribute('src', ' //netblog.cn/index.js');
document.getElementById("content").appendChild(script);
good:(如果第一个不确定选择器不存在的话就用后备的选择器)
var content=document.getElementById("content") || document.body;
var script=document.createElemnt("script");
script.setAttribute('src', ' //netblog.cn/index.js');
content.appendChild(script);
11.增值简化 bad:
var i=0;
if(value==="yes"){
var sName = aValues[i]; i++;
}
good:
var i=0;
if(value==="yes"){
var sName = aValues[i++];
}
12.尽量减少在for循环中的工作 bad:
for(var i=0;i<obj.length;i++){
//do something
}
good:(避免每次循环都计算obj的length,把length缓存起来)
for(var i=0,len=obj.length;i<len;i++){
//do something
}
13.使用字典替代switch bad:
var a="s3";
switch (a) {
case "s1":
result = "zero";
break;
case "s2":
result = "one";
break;
case "s3":
result = "three";
break;
default:
result = "unknown";
}
good:
var b={s1:"zero",s2:"one",s3:"three"}
var result=b[a];
14.return布尔值时 bad:
(function (){
if (age > 18) {
return true;
} else {
return false;
}
})();
good:
(function (){
return age > 18;
})();
15.不嵌套else的if 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...
}
16.定义多个变量 bad:
var a = "aa"; var b = "bb"; var c = "cc";
good:
var a = "aa", b = "bb", c = "cc";
17.避免在循环中频繁对dom的操作 bad:
for (var i = 0; i < 1000; i++){
str += str;
document.getElementById("box").innerHTML = str;
}
good:(循环完成后再操作dom)
for (var i = 0; i < 1000; i++){
str += str;
}
document.getElementById("box").innerHTML = str;
18.谨慎产生全局变量 bad:(无形中产生了全局变量b)
function (){
var a = b = 1;
}
good:
function (){
var a = 1,
b = 1;
}
19.参数的传递 bad:
function regist(userName, userPwd, userEmail, userPhone) {
//do something...
}
good:(过多参数把它们整合到一个json里面)
var user={userName:"", userPwd:"", userEmail:"", userPhone:""}
function regist(user) {
//do something
}
1
文章作者: “秋了秋”个人博客,本站鼓励原创。
转载请注明本文地址:http://netblog.cn/blog/460.html