知识大全 JavaScript的9个陷阱及评点

Posted

篇首语:不患人之不己知,患不知人也。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JavaScript的9个陷阱及评点相关的知识,希望对你有一定的参考价值。

JavaScript的9个陷阱及评点  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

    最后一个逗号

  如这段代码 注意最后一个逗号 按语言学角度来说应该是不错的(python的类似数据类型辞典dictionary就允许如此) IE会报语法错误 但语焉不详 你只能用人眼从几千行代码中扫描

  <script>  var theObj =         city : Boston         state : MA   </script>

    this的引用会改变

  如这段代码

  <input type= button value= Gotcha! id= MyButton ><script>var MyObject = function ()     this alertMessage = Javascript rules ;    this ClickHandler = function()         alert(this alertMessage );  ();document getElementById( theText ) onclick =  MyObject ClickHandler</script>

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

  <input type= button value= Gotcha! id= theText ><script>var MyObject = function ()     var self = this;    this alertMessage = Javascript rules ;    this OnClick = function()         alert(self value);    ();document getElementById( theText ) onclick =  MyObject OnClick</script>

  实质上 这就是JavaScript作用域的问题 如果你看过 你会发现解决方案不止一种

    标识盗贼

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

  <input type= button id= TheButton ><script>    TheButton = get( TheButton );</script>

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

    字符串只替换第一个匹配

  如下代码

  <script>    var fileName = This is a title replace( _ );</script>

  而实际上 结果是 This_is a title 在JavaScript中 String replace的第一个参数应该是正则表达式 所以 正确的做法是这样

  var fileName = This is a title replace(/ /g _ );

    mouseout意味着mousein

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

    parseInt是基于进制体系的

  这个是常识 可是很多人给忽略了parseInt还有第二个参数 用以指明进制 比如 parseInt( ) 如果你认为答案是 那就错了 因为 在此 字符串以 开头 parseInt以八进制来处理它 在八进制中 是非法 返回false 布尔值false转化成数值就是 因此 正确的做法是parseInt( )

 for in 会遍历所有的东西

  有一段这样的代码

  var arr = [ ]var total = ;for ( var x in arr)     total = total * arr[x];

  运行得好好的 不是吗?但是有一天它不干了 给我返回的值变成了NaN 晕 我只不过引入了一个库而已啊 原来是这个库改写了Array的prototype 这样 我们的arr平白无过多出了一个属性(方法) 而for in 会把它给遍历出来 所以这样做才是比较安全的

  for ( var x = ; x < arr length; x++)     total = total * arr[x];

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

    事件处理器的陷阱

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

  YAHOO util Event addListener(window click MyOnClickMethod);

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

    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() //这里我使用闭包改写过 若有兴趣可以对比原文 document getElementById( TheNewInput ) focus(); document getElementById( TheNewInput ) select(); ); cha138/Article/program/Java/JSP/201311/19388

相关参考

知识大全 世界500强面试题目及评点11-20

 问题11上下级之间应该怎样交往?分析通过这个问题可以了解求职者在企业等级结构中的沟通方式。通过对这一问题的回答,求职者可以展示自己在复杂领域工作的技能水平。错误回答我愿意并且相信我们可以成

知识大全 世界500强面试题目及评点21-30

 问题21在找工作时,你认为哪些事情对你来说在智力上最具有挑战性?为什么?分析这个问题可以用来了解求职者是否重视深入思考。通过这个问题,面试人可以了解求职者解决问题的能力。错误回答我希望找到

知识大全 世界500强面试题目及评点1–10

 问题1你为什么觉得自己能够在这个职位上取得成就?分析:这是一个相当宽泛的问题,它给求职者提供了一个机会,可以让求职者表明自己的热情和挑战欲。对这个问题的回答将为面试人在判断求职者是否对这个

瓦工施工阶段有哪几个陷阱问题?

瓦工施工阶段有哪几个陷阱问题?1、陷阱一:使用劣质水泥买不合格的劣质水泥,每包可节省5元左右,约可节省l00~200元左右;买不合格的劣质瓷砖,每块可节省0.5~1.0元或更多,这一项约可节省900元

装修基础施工阶段有哪几个陷阱问题?

装修基础施工阶段有哪几个陷阱问题?1、陷阱一:水工和电工是同一个人装修公司自己的水工和电工都是同一个人,而且更有甚者还是瓦工。其实他们既没有上岗证,也没有过高的专业水平。只要有足够的时间,一定要请一个

知识大全 JavaScript对象化编程基本对象分析[9]

JavaScript对象化编程基本对象分析[9]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 名企招聘者评点面试问题

上周末,中国电信集团黄页信息有限公司对12名经过初选的求职者进行第一轮面试,追踪了这一过程,并且记录下其中大多数求职者在面试中可能会遇到的问题,请中国电信黄页信息有限公司总经理刘苏南做了如下点评,希望

知识大全 14个经典的Javascript代码

14个经典的Javascript代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!■打开■&nbs

知识大全 JavaScript中几个重要的属性

JavaScript中几个重要的属性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  thisth

知识大全 8个JavaScript小特效代码

8个JavaScript小特效代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz