javaScript书写规范
- 命名规范。
常量名
全部大写并单词间用下划线分隔
如:CSS_BTN_CLOSE、TXT_LOADING
对象的属性或方法名
小驼峰式(little camel-case)
如:init、bindEvent、updatePosition
示例:Dialog.prototype = {
init: function () {},
bindEvent: function () {},
updatePosition: function () {}
…
};
类名(构造器)
-->小驼峰式但首字母大写
-->如:Current、DefaultConfig
函数名
-->小驼峰式
-->如:current()、defaultConfig()
变量名
-->小驼峰式
-->如:current、defaultConfig
私有变量名
-->小驼峰式但需要用_开头
-->如:_current、_defaultConfig
变量名的前缀
-->续
- 代码格式。
"()"前后需要跟空格
"="前后需要跟空格
","后面需要跟空格
JSON对象需格式化对象参数
if、while、for、do语句的执行体用"{}"括起来
“{}”格式如下。
if (a==1) {
//代码
};
避免额外的逗号。
var arr = [1,2,3,];
for-in循环体中必须用hasOwnProperty方法检查成员是否为自身成员,避免来自原型链上的污染。
- 长语句可考虑断行。
TEMPL_SONGLIST.replace('{TABLE}', da['results'])
.replace('{PREV_NUM}', prev)
.replace('{NEXT_NUM}', next)
.replace('{CURRENT_NUM}', current)
.replace('{TOTAL_NUM}', da.page_total);
为了避免和JSLint的检验机制冲突,“.”或“+”这类操作符放在行尾。
TEMPL_SONGLIST.replace('{TABLE}', da['results']).
replace('{PREV_NUM}', prev).
replace('{NEXT_NUM}', next).
replace('{CURRENT_NUM}', current).
replace('{TOTAL_NUM}', da.page_total);
如果模块代码中,使用其它全局变量想跳过JSLint的检查,可以在该文件中加入/*global*/声明。
/*global alert: true, console: true, top: true, setTimeout: true */
- 使用严格的条件判断符。用===代替==,用!==代替!=,避免掉入==造成的陷阱,在条件判断时,这样的一些值表示false。
null
undefined与null相等
字符串''
数字0
NaN
在==时,则会有一些让人难以理解的陷阱。
(function () {
var undefined;
undefined == null; // true
1 == true; //true
2 == true; // false
0 == false; // true
0 == ''; // true
NaN == NaN;// false
[] == false; // true
[] == ![]; // true
})();
对于不同类型的 == 判断,有这样一些规则,顺序自上而下:
undefined与null相等
一个是number一个是string时,会尝试将string转换为number
尝试将boolean转换为number
0或1
尝试将Object转换成number或string
而这些取决于另外一个对比量,即值的类型,所以对于0、空字符串的判断,建议使用===
。===会先判断两边的值类型,类型不匹配时为false。
- 下面类型的对象不建议用new构造。
new Number
new String
new Boolean
new Object //用{}代替
new Array //用[]代替
引用对象成员用obj.prop代替obj[“prop”],除非属性名是变量。
- 从number到string的转换。
/** 推荐写法*/
var a = 1;
typeof(a); //"number"
console.log(a); //1
var aa=a+'';
typeof(aa); //"string"
console.log(aa); //'1'
/** 不推荐写法*/
new String(a)或a.toString()
从string到number的转换,使用parseInt,必须显式指定第二个参数的进制。
/** 推荐写法*/
var a = '1';
var aa = parseInt(a,10);
typeof(a); //"string"
console.log(a); //'1'
typeof(aa); //"number"
console.log(aa); //1
从float到integer的转换。
/** 推荐写法*/
Math.floor/Math.round/Math.ceil
/** 不推荐写法*/
parseInt
字符串拼接应使用数组保存字符串片段,使用时调用join方法。避免使用+或+=的方式拼接较长的字符串,每个字符串都会使用一个小的内存片段,过多的内存片段会影响性能。
/**推荐的拼接方式array的push、join*/
var str=[],
list=['测试A','测试B'];
for (var i=0 , len=list.length; i < len; i++) {
str.push( '<div>'+ list[i] + '</div>');
};
console.log(str.join('')); //<div>测试A</div><div>测试B</div>
/** 不推荐的拼接方式+=*/
var str = '',
list=['测试A','测试B'];
for (var i = 0, len = list.length; i< len; i++) {
str+='<div>' + list[i] + '</div>';
};
console.log(str); //<div>测试A</div><div>测试B</div>
- 尽量避免使用存在兼容性及消耗资源的方法或属性。
不要使用with,void,evil,eval_r,innerText
- 注重HTML分离, 减小reflow, 注重性能。
收集整理了这些开发规范,感谢所有的原作者。
javaScript书写规范的更多相关文章
- HTML&CSS书写规范
第一部分:HTML书写规范: 1.1 HTML整体结构: 1.1.1:HTML基础设施: 文档以"<!DOCTYPE...>"首行顶格开始,推荐使用"< ...
- 【转】JavaScript常用代码书写规范
javascript 代码规范 代码规范我们应该遵循古老的原则:“能做并不意味着应该做”. 全局命名空间污染 总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块. 不推荐 1 2 3 var ...
- JavaScript常用代码书写规范
javascript 代码规范 代码规范我们应该遵循古老的原则:“能做并不意味着应该做”. 全局命名空间污染 总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块. 不推荐 , y = ; c ...
- 《编写可维护的JavaScript》——JavaScript编码规范(六)
变量.函数和运算符 在讨论过基本的JavaScript书写格式化之后,接下来关注如何使用函数.变量和运算符来减少复杂度和增强可读性就显得十分重要了. 变量声明 变量声明是通过var语句来完成的.var ...
- Javascript模块化规范
Javascript模块化规范 一.前端js模块化由来与演变 CommonJS 原来叫 ServerJS,推出 Modules/1.0 规范后,在 Node.js 等环境下取得了很不错的实践.09年下 ...
- CSS书写规范
一.CSS书写顺序 1.位置属性(position,top,right,z-index,display,float等) 2.大小(width,height,padding,margin) 3.文字系列 ...
- 推荐大家使用的CSS书写规范、顺序
写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规范来写CSS代码,这样会影响代码的阅读体验,这里总结一个CSS书写规范.CSS书写顺序供大家参考,这些是参考了国外一些文章以及我的个人经 ...
- 分享给大家的CSS书写规范、顺序
写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规范来写CSS代码,这样会影响代码的阅读体验,这里总结一个CSS书写规范.CSS书写顺序供大家参考,这些是参考了国外一些文章以及我的个人经 ...
- CSS书写规范及顺序
CSS书写顺序 1.位置属性(position, top, right, z-index, display, float等)2.大小(width, height, padding, margin)3. ...
随机推荐
- Python基础:Python函数、文件操作、递归
函数参数 函数参数包括位置参数,关键字参数,动态参数(*args, **args)三种. 传参的过程是形式参数的赋值. *args传入的参数是元组形式,**args传入的参数是字典形式. 示例代码如下 ...
- Cannot create file"C:\Users\LML\AppData\Local\Temp\EditorLineEnds.ttr"。另一个程序正在使用此文件,进程无法访问。
不能二次启动,每次开机第一次都ok,出于习惯,总是想试试第二次打开软件是否正常,结果不出所料,出现了“Cannot create file"C:\Users\LML\AppData\Loca ...
- 传说中的WCF:消息拦截与篡改
我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过借 ...
- selenium实战之斗鱼弹幕
python3.6.selenium.chromedriver 先上代码 from selenium import webdriver from time import sleep driver=we ...
- Python - 静态函数(staticmethod), 类函数(classmethod), 成员函数 区别(完全解析)
原文地址:http://blog.csdn.net/caroline_wendy/article/details/23383995 还有一篇:http://blog.csdn.net/carolzha ...
- The Bells are Ringing UVALive - 4060(枚举求解)
输出整数N,使得 t1 <= N 统计有多少组t1,t2,t3,满足:1<t1<t2<t3<=1000000,t3-t1<=25,且t1,t2,t3的最小公倍数 ...
- elasticsearch使用More like this实现基于内容的推荐
基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档.Lucene的api中有实现查询文章相似度的接口,叫MoreLikeThis.Elasticsearch封装了该接口,通过Ela ...
- 手动为容器设置ip地址
1.安装bridge-utils # aptitude install -y bridge-utils 2.配置网桥 # vim /etc/network/interfaces auto lo ifa ...
- java随机数的有趣用法
直接用代码说明,比较容易理解 package com.wz.other; import java.util.Random;import java.util.concurrent.ThreadLocal ...
- Web项目开发中用到的缓存技术
在WEB开发中用来应付高流量最有效的办法就是用缓存技术,能有效的提高服务器负载性能,用空间换取时间.缓存一般用来 存储频繁访问的数据 临时存储耗时的计算结果 内存缓存减少磁盘IO 使用缓存的2个主要原 ...