關注技術,關注生活

          任何事情只要開始去做,永遠不會太遲。
          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

          主站蜘蛛池模板: 乌拉特前旗| 永仁县| 贺兰县| 聂拉木县| 沁水县| 永修县| 昭通市| 包头市| 时尚| 彭阳县| 海丰县| 同仁县| 若羌县| 高青县| 牡丹江市| 高台县| 浮梁县| 邢台市| 焦作市| 鸡泽县| 厦门市| 西安市| 达拉特旗| 徐闻县| 华亭县| 务川| 龙海市| 兴文县| 汉中市| 北辰区| 关岭| 图木舒克市| 南汇区| 诸暨市| 麟游县| 江油市| 禹州市| 龙井市| 杭锦后旗| 兴城市| 措勤县|