@jflame
2014-07-23T13:27:39.000000Z
字数 913
阅读 920
Javascript
for (var i = fromIndex; i < arr.length; i++) {
换成
for (var i = fromIndex, ii = arr.length; i < ii; i++) {
一般情况下(从i = 0
开始循环),还可以进一步超进化
var i = arr.length;
while (i--) {
避免多次访问arr.length
属性
switch (node.tagName) {
case goog.dom.TagName.LINK:
case goog.dom.TagName.NOFRAMES:
case goog.dom.TagName.NOSCRIPT:
case goog.dom.TagName.META:
...
return false;
}
可以写成
//先建立一个obj对象
var takesChildren = {}
takesChildren[goog.dom.TagName.APPLET] = 1;
takesChildren[goog.dom.TagName.AREA] = 1;
...
//转到一个特定case时
return !takesChildren[node.tagName];
//如果为了防止prototype干扰,还可以
return !takesChildren.hasOwnProperty(node.tagName);
进行for in
循环一个obj
时,不要忘了先检测hasOwnProperty
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
...
}
}
注意undefined
不是保留字,可能被污染
isDef = function(val) {
var undefined;
return val !== undefined;
};
以上部分总结自[JavaScript]Google Closure: 糟糕的JavaScript
将一个函数的arguments
对象转化为数组对象
/*arguments对象只有length之类的类数组属性*/
var arr = [].slice.call(arguments);