this.length >>> 0表示什么? es5-safe

分类:Javascript| 发布:camnprbubuol| 查看: | 发表时间:2013/4/25

摘自:es5-safe.js

// ES5 15.4.4.18
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/foreach
 AP.forEach || (AP.forEach = function(fn, context) {
  for (var i = 0, len = this.length >>> 0; i < len; i++) {
    if (i in this) {
      fn.call(context, this[i], i, this);
    }
  }
 });

this.length >>> 0
此句解释:这个语句先将 array 的 length 属性存在局部变量 len 中加速访问。然后借助右移位运算符 用零填充 len 左边空出的位,这样做的好处是如果 length 未定义就取0.

语法解释:
result = expression1 >>> expression2
>>> 运算符将 expression1 的位右移 expression2 中指定的位数。 用零填充右移后左边空出的位。 右移的位被丢弃。

这个可以看ECMAScript的相关章节,可以用来将:
1. 所有非数值转化成0,例如undefined
2. 所有大于等于0等数取整数部分

'string' >>> 0  //==>0
null >>> 0 //==>0
undefined >>> 0 //==>0
34.23 >>> 0 //==>0
[] >>> 0 //==>0

这么写确实比 var len = this.length || 0; (parseInt?)要好很多,在遇到意外的 this 时,它不会返回 { }、NaN 等意外的值。(IE 6+ 支持)

参考:http://www.zhihu.com/question/20693429
http://javascript.about.com/od/hintsandtips/a/foreach.htm

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/javascript/636.html