知识大全 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相关参考
问题11上下级之间应该怎样交往?分析通过这个问题可以了解求职者在企业等级结构中的沟通方式。通过对这一问题的回答,求职者可以展示自己在复杂领域工作的技能水平。错误回答我愿意并且相信我们可以成
问题21在找工作时,你认为哪些事情对你来说在智力上最具有挑战性?为什么?分析这个问题可以用来了解求职者是否重视深入思考。通过这个问题,面试人可以了解求职者解决问题的能力。错误回答我希望找到
问题1你为什么觉得自己能够在这个职位上取得成就?分析:这是一个相当宽泛的问题,它给求职者提供了一个机会,可以让求职者表明自己的热情和挑战欲。对这个问题的回答将为面试人在判断求职者是否对这个
瓦工施工阶段有哪几个陷阱问题?1、陷阱一:使用劣质水泥买不合格的劣质水泥,每包可节省5元左右,约可节省l00~200元左右;买不合格的劣质瓷砖,每块可节省0.5~1.0元或更多,这一项约可节省900元
装修基础施工阶段有哪几个陷阱问题?1、陷阱一:水工和电工是同一个人装修公司自己的水工和电工都是同一个人,而且更有甚者还是瓦工。其实他们既没有上岗证,也没有过高的专业水平。只要有足够的时间,一定要请一个
JavaScript对象化编程基本对象分析[9] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
上周末,中国电信集团黄页信息有限公司对12名经过初选的求职者进行第一轮面试,追踪了这一过程,并且记录下其中大多数求职者在面试中可能会遇到的问题,请中国电信黄页信息有限公司总经理刘苏南做了如下点评,希望
14个经典的Javascript代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!■打开■&nbs
JavaScript中几个重要的属性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! thisth
8个JavaScript小特效代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz