关注技术,关注生活

任何事情只要开始去做,永远不会太迟。
posts - 5, comments - 23, trackbacks - 0, articles - 18
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

今天自己也发现了prototype的一个定位的bug。

转自:http://www.cnblogs.com/ashun/archive/2006/12/08/prototype-js-bug.html

1. String.prototype.camelize    BUG

这个方法用来返回字符串的骆驼写法。用js 控制元素的 style的时候经常使用
比如

var  ss = " font-color "   
ss
= ss.camelize()     //  fontColor

通常情况下 camelize 会工作得很好,但是有一个特列,那就是浮动定位  float

var  ss = " float "   
obj.style[ss.camelize()]
= " right "   //  这将导致一个错误。

显然,作者没有考虑 float这种特殊情况,正确的写法是: 

ie:   obj.style.styleFloat = " right "
ff:   obj.style.cssFloat
= " right "


2. String.prototype.inspect   BUG

这里 inspect 方法是有Bug的, 作者用replace 方法的时候没有用正则,导致只能替换掉第一个匹配的字符。

正确的写法应该这样
  inspect: function() {
    return "'" + this.replace(/\\/g, '\\\\').replace(/"/g, '\\\"') + "'";
  }

3. Array.prototype.all   BUG
 这个方法检测是否数组中所有元素都能够让迭代函数为真。 如果全部能满足,则返回true,否则返回false

var  f = function (x){ return  x % 2 == 0 }   // 检查一个数是否是偶数
var  arr = [ 2 , 4 , 6 ]
alert (arr.all(f)
== true )    // 显示 true

但是当  arr为空的时候,仍然返回 true

var  arr = []
alert(arr.all(f)
== true )    // 显示true


4.  Array.prototype.any  BUG
同 all方法,对空数组仍然返回true

5.Array.prototype.detect  也就是 find方法
这个不是 Bug ,但是不看原代码很容易让人误解,从而出错。
这个方法查找第一个能满足 迭代函数 的元素,最后返回元素的值
误解一:

    var  f = function (x){ return  x % 2 == 0 }   // 检测是否是偶数
    var  arr = [ 1 , 3 , 5 , 7 ]     // 故意定义一个全为奇数的数组。
   alert(arr.find(f) == false )    // false 
    // 很多人误以为 find 函数在找不到满足条件的元素的时候会返回 false ,实际上,它返回的是 "undefined"

误解二:
   寻找数组中的数字元素

    var  f = function (x){ return   ! isNaN(x)  &&   typeof (x) === " number " }
   
var  arr = [ false , " go_rush " , 0 , " 阿舜 " ]
   
if  (arr.find(f)) alert( " 数组中含有数字元素 " )      // 事实上 这个 alert永远不会执行。

因为 find方法返回的是第一个符合条件的值。  这里返回:0.  所以.....


6. 对hash 对象的处理需要格外小心的地方

var  hash = {member: 1 ,test: 2 ,ids: 3 }
alert(hash.member)
alert($H(hash).inspect())
alert($H(hash).toQueryString())
// hash.member实际是存在的  但是.inspect() 和 .toQueryString()却当它不存在

同样下面这些属性也会和 prototype.js 相冲突。

each, all, any, collect, detect, findAll, grep, include, inject, invoke, max, min,
partition, pluck, reject, sortBy, toArray, zip, inspect, map, find, select, member, entries

http://community.csdn.net/Expert/topic/4964/4964523.xml?temp=4.314822E-02


只有注册用户登录后才能发表评论。


网站导航: