[关闭]
@jflame 2014-07-23T13:27:39.000000Z 字数 913 阅读 920

JavaScript注意事项

Javascript


对数组进行for循环

  1. for (var i = fromIndex; i < arr.length; i++) {

换成

  1. for (var i = fromIndex, ii = arr.length; i < ii; i++) {

一般情况下(从i = 0开始循环),还可以进一步超进化

  1. var i = arr.length;
  2. while (i--) {

避免多次访问arr.length属性

使用switch case

  1. switch (node.tagName) {
  2. case goog.dom.TagName.LINK:
  3. case goog.dom.TagName.NOFRAMES:
  4. case goog.dom.TagName.NOSCRIPT:
  5. case goog.dom.TagName.META:
  6. ...
  7. return false;
  8. }

可以写成

  1. //先建立一个obj对象
  2. var takesChildren = {}
  3. takesChildren[goog.dom.TagName.APPLET] = 1;
  4. takesChildren[goog.dom.TagName.AREA] = 1;
  5. ...
  6. //转到一个特定case时
  7. return !takesChildren[node.tagName];
  8. //如果为了防止prototype干扰,还可以
  9. return !takesChildren.hasOwnProperty(node.tagName);

使用for in遍历

进行for in循环一个obj时,不要忘了先检测hasOwnProperty

  1. for (var key in obj) {
  2. if (obj.hasOwnProperty(key)) {
  3. ...
  4. }
  5. }

使用undefined值

注意undefined不是保留字,可能被污染

  1. isDef = function(val) {
  2. var undefined
  3. return val !== undefined;
  4. };

以上部分总结自[JavaScript]Google Closure: 糟糕的JavaScript

一些JS小技巧

将一个函数的arguments对象转化为数组对象

  1. /*arguments对象只有length之类的类数组属性*/
  2. var arr = [].slice.call(arguments);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注