關注技術,關注生活

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

          主站蜘蛛池模板: 伊吾县| 阿巴嘎旗| 中宁县| 贵定县| 石城县| 苏尼特左旗| 汾西县| 斗六市| 翁牛特旗| 中方县| 格尔木市| 宝应县| 翁源县| 平阴县| 连城县| 兴城市| 台州市| 石家庄市| 丰台区| 皋兰县| 平昌县| 牡丹江市| 绍兴市| 哈巴河县| 益阳市| 杭锦旗| 浦北县| 芦溪县| 达州市| 同江市| 蒙山县| 无极县| 建德市| 蓝田县| 普洱| 襄汾县| 大安市| 缙云县| 阳谷县| 鄱阳县| 舞阳县|