<dl id="q0jn1"><ins id="q0jn1"></ins></dl>
  • <dl id="q0jn1"><font id="q0jn1"><nobr id="q0jn1"></nobr></font></dl>

    <dl id="q0jn1"></dl>

  • <dl id="q0jn1"><ins id="q0jn1"><nobr id="q0jn1"></nobr></ins></dl><output id="q0jn1"><ins id="q0jn1"></ins></output><dl id="q0jn1"><font id="q0jn1"></font></dl>
    <output id="q0jn1"></output>
    <dl id="q0jn1"></dl>
    <dl id="q0jn1"><font id="q0jn1"></font></dl>
    1. <output id="q0jn1"><ins id="q0jn1"></ins></output>
      <dl id="q0jn1"><ins id="q0jn1"></ins></dl>

    2. <dl id="q0jn1"></dl>

            1. <dl id="q0jn1"></dl>
              1. 国联商务网 -全面的电子商务资源网O2O本地生活网£¡

                TOW国联商务网

                当前位置: 主页 > 新闻资讯 > 休闲娱乐 >

                JavaScript的9个陷阱及评点

                时间:2010-04-07 09:36来源: 作者: 点击:
                来自Nine Javascript Gotchas, 以下是JavaScript容易犯错的九个陷阱¡£虽然不是什么很高深的技术问题£¬但注意一下£¬会使您的编程轻松些£¬即所谓make life easier. 笔者对某些陷阱会混杂一些评点¡£

                来自, 以下是JavaScript容易犯错的九个陷阱¡£虽然不是什么很高深的技术问题£¬但注意一下£¬会使您的编程轻松些£¬即所谓make life easier. 笔者对某些陷阱会混杂一些评点¡£

                1. 最后一个逗号

                  如这段代码£¬注意最后一个逗号£¬按语言学角度来说应该是不错的£¨python的类似数据类型辞典dictionary就允许如此£©¡£IE会报语法错误£¬但语焉不详£¬你只能用?#25628;?#20174;几千行代码中扫描¡£

                   
                2. this的引用会改变

                  如这段代码£º

                  
                  

                  并不如你所愿£¬答案并不是¡±JavaScript rules¡±¡£在执行MyObject.ClickHandler时£¬代码中红色这行£¬this的引用实际上指向的是document.getElementById("theText")的引用¡£可以这么解决£º

                  
                  

                  实质上£¬这就是¡£如果你看过£¬你会发现解决方案不止一种¡£

                3. 标识盗贼

                  在JavaScript中不要使用跟HTML的id一样的变量名¡£如下代码£º

                  
                  

                  IE会报对象未定义的错误¡£我只能说£ºIE sucks.

                4. 字符串只替换第一个匹配

                  如下代码£º

                  而实际上£¬结果是¡±This_is a title¡°. 在JavaScript中£¬String.replace的第一个?#38382;?#24212;该是正则表达式¡£所以£¬正确的做法是这样£º

                  var fileName = "This is a title".replace(/ /g,"_");
                5. mouseout意味着mousein

                  事实上£¬这是由于事件冒泡导致的¡£IE中有mouseentermouseleave£¬但不是标准的¡£作者在此建议大家使用库比如YUI来解决问题¡£

                6. parseInt是基于进制体系的

                  这个是常识£¬可是很多人给忽略了parseInt还有第二个?#38382;ý£?#29992;以?#35813;?#36827;制¡£比如£¬parseInt("09")£¬如果你认为答案是9£¬那就错了¡£因为£¬在此£¬字符串以0开头£¬parseInt以八进?#35780;?#22788;理它£¬在八进制中£¬09是非法£¬返回false£¬?#32423;?#20540;false转化成数值就是0. 因此£¬正确的做法是parseInt("09", 10).

                7. for...in...会遍历所有的东西

                  有一段这样的代码£º

                  var arr = [5,10,15]
                  var total = 1;
                  for ( var x in arr) {
                      total = total * arr[x];
                  }

                  运行得好好的£¬不是吗£¿但是有一天它不干了£¬给我返回的?#24403;?#25104;了NaN, 晕¡£我只不过引入了一个库而已啊¡£原来是这个库改写了Arrayprototype£¬这样£¬我们的arr平白无过多出了一个属性£¨方法£©£¬而for...in...会把它给遍历出来¡£所以这样做才是比较安全的£º

                  for ( var x = 0; x < arr.length; x++) {
                      total = total * arr[x];
                  }

                  其实£¬这也是污染基本类的prototype会带来危害的一个例证¡£

                8. 事件处理器的陷阱

                  这其实只会存在使用作为对象属性的事件处理器才会存在的问题¡£比如window.onclick = MyOnClickMethod这样的代码£¬这会复写掉之前的window.onclick事件£¬还可能导致IE的内容泄露£¨sucks again£©¡£在IE还没有支持DOM 2的事件注册之前£¬作者建议使用库来解决问题£¬比如使用YUI:

                  YAHOO.util.Event.addListener(window, "click", MyOnClickMethod);

                  这应该也属于常识问题£¬但新手可能容易犯错¡£

                9. Focus Pocus

                  新建一个input文本元素£¬然后把焦点挪到它上面£¬按理说£¬这样的代码应该很自然£º

                  var newInput = document.createElement("input");
                  document.body.appendChild(newInput);
                  newInput.focus();
                  newInput.select();

                  但是IE会报错£¨sucks again and again£©¡£理由可能是当你执行fouce()的时候£¬元素尚未可用¡£因此£¬我们可以延迟执行£º

                  var newInput = document.createElement("input");
                  newInput.id = "TheNewInput";
                  document.body.appendChild(newInput);
                  setTimeout(function(){ //这里我使用闭包改写过£¬若?#34892;?#36259;可以对比原文
                  	document.getElementById('TheNewInput').focus();
                  	document.getElementById('TheNewInput').select();}, 10);

                在实践中£¬JavaScript的陷阱还有很多很多£¬大多是由于解析器的实现不到位而引起¡£这些东西一般都不会在教科书中出现£¬只能靠开发者之间的经验分享¡£谢天谢地£¬我们生活在网络时代£¬很多碰到的问题£¬一般都可以在Google中找到答案¡£

                来源:

                (责任编辑£ºadmin)
                织?#21619;?#32500;码生成器
                顶一下
                (0)
                0%
                踩一下
                (0)
                0%
                ------分隔线----------------------------
                发表评论
                请自觉遵守互联网相关的政策法规£¬严禁发布色情¡¢暴力¡¢反动的言论¡£
                评价:
                表情:
                用户名: 验证码:点击我更换图片
                ?#25913;?#21015;表
                推荐内容
                360×ã²Ê4³¡½øÇò²Ê

                <dl id="q0jn1"><ins id="q0jn1"></ins></dl>
              2. <dl id="q0jn1"><font id="q0jn1"><nobr id="q0jn1"></nobr></font></dl>

                <dl id="q0jn1"></dl>

              3. <dl id="q0jn1"><ins id="q0jn1"><nobr id="q0jn1"></nobr></ins></dl><output id="q0jn1"><ins id="q0jn1"></ins></output><dl id="q0jn1"><font id="q0jn1"></font></dl>
                <output id="q0jn1"></output>
                <dl id="q0jn1"></dl>
                <dl id="q0jn1"><font id="q0jn1"></font></dl>
                1. <output id="q0jn1"><ins id="q0jn1"></ins></output>
                  <dl id="q0jn1"><ins id="q0jn1"></ins></dl>

                2. <dl id="q0jn1"></dl>

                        1. <dl id="q0jn1"></dl>
                          1. <dl id="q0jn1"><ins id="q0jn1"></ins></dl>
                          2. <dl id="q0jn1"><font id="q0jn1"><nobr id="q0jn1"></nobr></font></dl>

                            <dl id="q0jn1"></dl>

                          3. <dl id="q0jn1"><ins id="q0jn1"><nobr id="q0jn1"></nobr></ins></dl><output id="q0jn1"><ins id="q0jn1"></ins></output><dl id="q0jn1"><font id="q0jn1"></font></dl>
                            <output id="q0jn1"></output>
                            <dl id="q0jn1"></dl>
                            <dl id="q0jn1"><font id="q0jn1"></font></dl>
                            1. <output id="q0jn1"><ins id="q0jn1"></ins></output>
                              <dl id="q0jn1"><ins id="q0jn1"></ins></dl>

                            2. <dl id="q0jn1"></dl>

                                    1. <dl id="q0jn1"></dl>