- 除了三目运算,if,else等禁止简写
// 正确的书写
if (true) {
alert(name);
}
console.log(name);
// 不推荐的书写
if (true)
alert(name);
console.log(name);
// 不推荐的书写
if (true)
alert(name);
console.log(name)
- 在需要以{}闭合的代码段前增加换行,如:for if
// 没有换行,小的代码段无法区分
if (wl && wl.length) {
for (i = 0, l = wl.length; i < l; ++i) {
p = wl[i];
type = Y.Lang.type(r[p]);
if (s.hasOwnProperty(p)) {
if (merge && type == 'object') {
Y.mix(r[p], s[p]);
} else if (ov || !(p in r)) {
r[p] = s[p];
}
}
}
}
// 有了换行,逻辑清楚多了
if (wl && wl.length) {
for (i = 0, l = wl.length; i < l; ++i) {
p = wl[i];
type = Y.Lang.type(r[p]);
if (s.hasOwnProperty(p)) {
// 处理merge逻辑
if (merge && type == 'object') {
Y.mix(r[p], s[p]);
} else if (ov || !(p in r)) {
r[p] = s[p];
}
}
}
}
换行可以是空行,也可以是注释
- 使用Function进行类的定义,不推荐继承,如需继承采用成熟的类库实现继承
// 类的实现
function Person(name) {
this.name = name;
}
Person.prototype.sayName = function() {
alert(this.name);
};
var me = new Person("Nicholas");
// 将this放到局部变量self
function Persion(name, sex) {
var self = this;
self.name = name;
self.sex = sex;
}
平时咱们写代码,基本都是小程序,真心用不上什么继承,而且继承并不是JS的擅长的语言特性,尽量少用。如果非要使用的话,注意一点:
function A(){
//...
}
function B(){
//...
}
B.prototype = new A();
B.prototype.constructor = B; //原则上,记得把这句话加上
继承从原则上来讲,别改变他的构造函数,否则这个继承就显得很别扭了~ - 使用局部变量缓存反复查找的对象(包括但不限于全局变量、dom查询结果、作用域链较深的对象)
// 缓存对象
var getComment = function() {
var dom = $("#common-container"), // 缓存dom
appendTo = $.appendTo, // 缓存全局变量
data = this.json.data; // 缓存作用域链较深的对象
}
//当需要缓存this时必须使用self变量进行缓存
// 缓存this
function Row(name) {
var self = this;
self.name = name;
$(".row").click(function() {
self.getName();
});
}
self是一个保留字,不过用它也没关系。在这里,看个人爱好吧,可以用_this, that, me等这些词,都行,但是团队开发的时候统一下比较好。 - 使用eval,采取$.parseJSON
三个原因:
有注入风险,尤其是ajax返回数据
不方便debug效率低,eval是一个执行
效率很低的函数
建议: 使用new Function来代替eval的使用,最好就别用。