關注技術,關注生活

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

          主站蜘蛛池模板: 舒城县| 阳泉市| 涡阳县| 舞钢市| 东港市| 武宁县| 南昌县| 长垣县| 江津市| 淅川县| 滁州市| 临西县| 自贡市| 莱州市| 保定市| 芒康县| 会同县| 元朗区| 永福县| 琼中| 宁都县| 丹凤县| 垦利县| 凤山县| 视频| 佳木斯市| 双辽市| 常宁市| 察隅县| 读书| 龙游县| 吉安县| 百色市| 化州市| 阿拉尔市| 富宁县| 尼玛县| 高密市| 漠河县| 阿坝| 永胜县|