@jflame
2014-07-23T13:27:39.000000Z
字数 913
阅读 962
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);