说起来还觉得丢人,公司的系统开发了两年,目前jquery的版本还是用的1.4.4。
mantis上的Bug一堆,今天在改bug的时候发现一个jQuery的Bug。
改bug嘛,一开始总是各种调试,总感觉怪怪的。经过各种分析和猜想后,最后问题归结到jquery.data函数。于是做了个实验。
先写了一个简单的页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html> <head> <script type="text/javascript" src="jquery-1.4.4.min.js"></script> <script type="text/javascript"> $(function(){ $("#box").text("hello jquery"); }); </script> </head> <body> <div id="box"></div> </body> </html>
接着我在控制台执行:
结果却返回了一个function。
但执行:
返回undefined。
然后又是各种猜想和测试,发现执行jquery的内部函数名称的参数时,这些内部函数名都会返回函数体。
$.data($("abc"),"css") $.data($("abc"),"data") $.data($("abc"),"text")
我觉得这是个jQuery1.4.4的bug。所以我又试了下最新版本的jQuery1.10.2 。
在最新版本下,返回的就都是undefined了。即我所认为的正常返回结果。
接着我建议升级jQuery的版本,但经理说,升级会有风险,因为有些接口在高版本里用法改掉了。
没办法,确实有这问题。但早干嘛了。目前只能先尽量避免使用这些特殊的名称了。1.4.4应该还存有很多Bug。这次只需要改掉几个命名就行了。但下次还不知道有怎样的奇葩问题。