您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 最好用的javascript编码规范中文版
编码规范中文版类型原始值:存取直接作用于它自身。ostringonumberobooleanonulloundefined1.varfoo=1;2.varbar=foo;3.4.bar=9;5.6.console.log(foo,bar);//=1,9复杂类型:存取时作用于它自身值的引用。oobjectoarrayofunction1.varfoo=[1,2];2.varbar=foo;3.4.bar[0]=9;5.6.console.log(foo[0],bar[0]);//=9,9对象使用直接量创建对象。1.//bad2.varitem=newObject();3.={};不要使用保留字作为键名,它们在IE8下不工作。1.//bad2.varsuperman={3.default:{clark:'kent'},4.private:true5.};6.7.//good8.varsuperman={9.defaults:{clark:'kent'},10.hidden:true11.};使用同义词替换需要使用的保留字。1.//bad2.varsuperman={3.class:'alien'4.};5.6.//bad7.varsuperman={8.klass:'alien'9.};10.11.//good12.varsuperman={13.type:'alien'14.};对象使用直接量创建数组。1.//bad2.varitems=newArray();3.4.//good=[];向数组增加元素时使用Array#push来替代直接赋值。1.varsomeStack=[];2.3.4.//bad5.someStack[someStack.length]='abracadabra';6.7.//good8.someStack.push('abracadabra');当你需要拷贝数组时,使用Array#slice。1.varlen=items.length;2.varitemsCopy=[];3.vari;4.5.//bad6.for(i=0;ilen;i++){7.itemsCopy[i]=items[i];8.}9.10.//good11.itemsCopy=items.slice();使用Array#slice将类数组对象转换成数组。1.functiontrigger(){2.varargs=Array.prototype.slice.call(arguments);3....4.}字符串使用单引号‘’包裹字符串。1.//bad2.varname=BobParr;='BobParr';6.7.//bad8.varfullName=Bob+this.lastName;9.10.//good11.varfullName='Bob'+this.lastName;超过100个字符的字符串应该使用连接符写成多行。注:若过度使用,通过连接符连接的长字符串可能会影响性能。1.//bad2.varerrorMessage='ThisisasuperlongerrorthatwasthrownbecauseofBatman.WhenyoustoptothinkabouthowBatmanhadanythingtodowiththis,youwouldgetnowherefast.';3.4.//bad5.varerrorMessage='Thisisasuperlongerrorthatwasthrownbecause\6.ofBatman.WhenyoustoptothinkabouthowBatmanhadanythingtodo\7.withthis,youwouldgetnowhere\8.fast.';9.10.//good11.varerrorMessage='Thisisasuperlongerrorthatwasthrownbecause'+12.'ofBatman.WhenyoustoptothinkabouthowBatmanhadanythingtodo'+13.'withthis,youwouldgetnowherefast.';程序化生成的字符串使用Array#join连接而不是使用连接符。尤其是IE下1.varitems;2.varmessages;3.varlength;4.vari;5.6.messages=[{7.state:'success',8.message:'Thisoneworked.'9.},{10.state:'success',11.message:'Thisoneworkedaswell.'12.},{:'Thisonedidnotwork.'15.}];16.17.length=messages.length;18.19.//bad20.functioninbox(messages){21.items='ul';22.23.for(i=0;ilength;i++){24.items+='li'+messages[i].message+'/li';25.}26.27.returnitems+'/ul';28.}29.30.//good31.functioninbox(messages){32.items=[];33.34.for(i=0;ilength;i++){35.//usedirectassignmentinthiscasebecausewe'remicro-optimizing.36.items[i]='li'+messages[i].message+'/li';37.}38.39.return'ul'+items.join('')+'/ul';40.}函数函数表达式:1.//匿名函数表达式2.varanonymous=function(){3.returntrue;4.};5.6.//命名函数表达式7.varnamed=functionnamed(){8.returntrue;9.};10.11.//立即调用的函数表达式(IIFE)12.(function(){13.console.log('WelcometotheInternet.Pleasefollowme.');}());永远不要在一个非函数代码块(if、while等)中声明一个函数,把那个函数赋给一个变量。浏览器允许你这么做,但它们的解析表现不一致。注:ECMA-262把块定义为一组语句。函数声明不是语句。1.//bad2.if(currentUser){3.functiontest(){4.console.log('Nope.');5.}6.}7.8.//good9.vartest;10.if(currentUser){11.test=functiontest(){12.console.log('Yup.');13.};14.}永远不要把参数命名为arguments。这将取代函数作用域内的arguments对象。1.//bad2.functionnope(name,options,arguments){3.//...stuff...4.}5.6.//good7.functionyup(name,options,args){8.//...stuff...9.}属性使用.来访问对象的属性。1.varluke={2.jedi:true,3.age:28};5.6.//bad7.varisJedi=luke['jedi'];8.9.//good10.varisJedi=luke.jedi;当通过变量访问属性时使用中括号[]。1.varluke={2.jedi:true,3.age:284.};5.6.functiongetProp(prop){7.returnluke[prop];8.}9.10.varisJedi=getProp('jedi');变量总是使用var来声明变量。不这么做将导致产生全局变量。我们要避免污染全局命名空间。1.//bad2.superPower=newSuperPower();3.4.//good5.varsuperPower=newSuperPower();-使用var声明每一个变量。这样做的好处是增加新变量将变的更加容易,而且你永远不用再担心调换错;跟,。1.//bad2.varitems=getItems(),3.goSportsTeam=true,4.dragonball='z';5.6.//bad(跟上面的代码比较一下,看看哪里错了)8.varitems=getItems(),9.goSportsTeam=true;10.dragonball='z';11.12.//good13.varitems=getItems();14.vargoSportsTeam=true;15.vardragonball='z';最后再声明未赋值的变量。当你需要引用前面的变量赋值时这将变的很有用。1.//bad2.vari,len,dragonball,3.items=getItems(),4.goSportsTeam=true;5.6.//bad7.vari;8.varitems=getItems();9.vardragonball;10.vargoSportsTeam=true;11.varlen;12.13.//good14.varitems=getItems();15.vargoSportsTeam=true;16.vardragonball;17.varlength;18.vari;在作用域顶部声明变量。这将帮你避免变量声明提升相关的问题。1.//bad2.function(){3.test();4.console.log('doingstuff..');5.6.//..otherstuff..7.8.varname=getName();9.10.if(name==='test'){11.returnfalse;12.}}16.17.//good18.function(){19.varname=getName();20.21.test();22.console.log('doingstuff..');23.24.//..otherstuff..25.26.if(name==='test'){27.returnfalse;28.}29.30.returnname;31.}32.33.//bad-不必要的函数调用34.function(){35.varname=getName();36.37.if(!arguments.length){38.returnfalse;39.}40.41.this.setFirstName(name);42.43.returntrue;44.}45.46.//good47.function(){48.varname;49.50.if(!arguments.length){51.returnfalse;52.}53.54.name=getName();55.this.setFirstName
本文标题:最好用的javascript编码规范中文版
链接地址:https://www.777doc.com/doc-4305743 .html