|  客服中心  |  合作联系
搜刊网
学术热点
行业资讯
越野车追赶藏羚羊事件续:涉事7人被罚超10万
发布时间:2017-10-10 来源:中国学术期刊网 访问:

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

  1. 最后一个逗号

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

     
  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的第一个参数应该是正则表达式。所以,正确的做法是这样:

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

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

  6. parseInt是基于进制体系的

    这个是常识,可是很多人给忽略了parseInt还有第二个参数,用以指明进制。比如,parseInt("09"),如果你认为答案是9,那就错了。因为,在此,字符串以0开头,parseInt以八进制来处理它,在八进制中,09是非法,返回false,布尔值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];}

    运行得好好的,不是吗?但是有一天它不干了,给我返回的值变成了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(){ //这里我使用闭包改写过,若有兴趣可以对比原文	document.getElementById('TheNewInput').focus();	document.getElementById('TheNewInput').select();}, 10);

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

来源:

相关文章
热门资讯
摘要:9月28日-29日,《两岸关系》杂志社社长任勉一行3人来漯河临颍就陈星聚杯太极拳比赛筹备工作情况进行调...
精品推荐
摘要:摘 要:健康的心理素质是健康人的必备素质。在学科教学中进行心理健康的教育,是心理健康教育的重要途径...
热门期刊
江西科技师范大学学报江西科技师范大学学报
《江西科技师范大学学报》杂志,双月刊,于1981年经国家新闻出版总署批准正式创刊,由江西科技师范大学主管主办...
同行同行
《同行》杂志是由安徽省残疾人联合会主管主办,国家行政学院,北京勤正国际文化有限公司协办(全年12期);出版地:北...
成都航空职业技术学院学报成都航空职业技术学院学报
《成都航空职业技术学院学报》杂志,季刊,于2000年经国家新闻出版总署批准正式创刊,由四川省教育厅主管,成都航...
财贸经济财贸经济
《财贸经济》杂志,于1980年经国家新闻出版总署批准正式创刊,CN:11-1166/F,本刊在国内外有广泛的覆盖面,题材新...
小哥白尼小哥白尼
《小哥白尼》杂志,月刊,于2006年经国家新闻出版总署批准正式创刊,由陕西省出版印刷公司主管主办的学术性刊物,...
家庭药师家庭药师
《家庭药师》由中国家庭医生杂志社主办,中山医医药有限公司协办,面向药店顾客、医院患者及所有珍爱健康的民...

友情链接
中教杯 国家新闻出版总署 中国知网 万方数据 维普网 中国科学院 中国国家图书馆 央视英文版 中国留学网 中青网 中国国家人才网 中国经济网 中国日报网 中国新闻网 中国学术期刊网
关于我们
平台简介
诚聘英才
企业文化
竞争优势
版权信息
服务条款
客服承诺
常见问题
版权声明
合作加盟
期刊加盟
广告服务
联系我们
网站导航
期刊大全
论文下载
课题申报
学术会议
编辑QQ
编辑联络
2007-2023
中文学术期刊检索机构
bianjibu777@qq.com
联系我们

版权所有©2007- 2023 中国学术期刊网(qikanw.com) All Rights Reserved 京ICP备2021008252号
本站是学术论文网络平台,若期刊网有侵犯您的版权,请及时与期刊网客服取得联系,联系信箱: bianjibu777@qq.com    
中国学术期刊网