JavaScript中常见陷阱小结

 更新时间:2010年04月27日 17:03:38   作者:  
JavaScript中常见陷阱,都是一些实际应用中,需要注意的地方,需要的朋友可以参考下。
你所创建的所有函数都是区分大小写的
单引号('字符串')和双引号("字符串")在JavaScript中没有特殊的区别,都可以用来创建字符串.但作为一般原则,大多数WEB开发者都选择使用单引号 而不是双引号,因为XHTML规范要求所有XHTML属性值都必须使用双引号括起来.

JavaScript不支持重载,在JavaScript中,脚本在执行时不会顾及函数定义时的参数,而是直接使用在作用域链中最后定义的那个函数。这意味着,相同名称的函数永远只存在一个实例


闭包是与作用域相关的一个概念,它指的是内部函数即使在外部函数执行完成并终止后,依然可以访问其外部函数的属性。当引用一个变量或方法时,JavaScript会沿着由对象执行路径构成使用域链对使用域进行解析,查找变量最近定义的值,一旦找到即使用该值。function initAnchors(event){
复制代码 代码如下:

  for (var i=1; i <=3; i++){
    var anchor = document.GetElementById('anchor' + i);
    anchor.attachEvent('onclick', function() { 
    alert('my id is anchor' + i);
    });
  }
}

假设页面中有三个A元素,ID分别为anchor1到anchor3,程序为三个A元素注册onclick事件,单击第个A元素显示"my id is anchorX",但实际运行情况却不是这样,单击每个A元素都显示"my id is anchor4"。为什么会这样呢,因为i的值实际上是在单击事件发生时才从使用域链中取得的,当单击事件发生时,initAnchors()已执行完毕,此时i的值等于4。解决方法可以按如下
复制代码 代码如下:

function registerAnchorListner(anchor,i){
  anchor.attachEvent('onclick', function() { 
    alert('my id is anchor' + i);
  }  
}
function initAnchors(event){
  for (var i=1; i <=3; i++){
    var anchor = document.GetElementById('anchor' + i);
    registerAnchorListner(anchor,i);

  }

}

var anchor = document.GetElementById('anchor' + i);
anchor.attachEvent('onclick', function() {
alert('my id is anchor' + i);



});



迭代对象,在编写脚本时经常使用到迭代,如下:
复制代码 代码如下:

var list = [1,2,3,4];
for(var i = 0;i < list.length; i++){
  alert(list);
}

另一种可供选择的迭代方法是使用for循环遍历位于(in)list中的每个属性:
复制代码 代码如下:

for(var i in list){
  alert(list);
}

此时,得到的是与使用前一迭代方法相同的结果,因为list是一个Array对象。

但是,当使用for(var i in item)方法操纵类似数组而又不是数组的对象时一定要格外小心,如下
复制代码 代码如下:

var all=document.getElementsByTagName('*');
for(var i in all){
  //对照all元素进行某些操作
}

在这次的迭代过程中,i的值会分别等于length、item和namedItem,而这很可能会导致代码中出现意外错误。在某些情况下,可以使用对象的hasOwnProperty()方法来避免这个问题。如果对象的属性或方法是非继承的,那么hasOwnProperty()方法返回true。即这里的检查不涉及从其它对象继承的属性和方法,只会检查在特定对象自身中直接创建的属性,比如分配给数组的元素。因此,在如果在for循环中使用这种检查,那么循环将会跳过length这样属性,因为length不是数组all的真系属性,而是从派生数组all的NameNodeMap对象中继承的属性
复制代码 代码如下:

var all=document.getElementsByTagName('*');
for(var i in all){
  if(!all.hasOwnProperty(i)) continue;
  //对照all元素进行某些操作
}

相关文章

  • Js 冒泡事件阻止实现代码

    Js 冒泡事件阻止实现代码

    当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发
    2013-01-01
  • javascript中的startWith和endWith的几种实现方法

    javascript中的startWith和endWith的几种实现方法

    javascript中的startWith和endWith的几种实现方法,需要的朋友可以参考一下
    2013-05-05
  • JS中使用变量保存arguments对象的方法

    JS中使用变量保存arguments对象的方法

    这篇文章主要介绍了JS中使用变量保存arguments对象的方法的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • javascript数组拍平方法总结

    javascript数组拍平方法总结

    本篇文章给大家详细分析了javascript数组拍平的方法,对此有兴趣的朋友跟着小编一起学习下吧。
    2018-01-01
  • javascript各种复制代码收集

    javascript各种复制代码收集

    javascript各种形式的复制代码效果,有直接复制url,复制文本框中的内容、隐藏表单中的内容,复制span中的内容
    2008-09-09
  • 基于javascript实现贪吃蛇经典小游戏

    基于javascript实现贪吃蛇经典小游戏

    这篇文章主要为大家详细介绍了JS实现贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • JavaScript实现网页播放器

    JavaScript实现网页播放器

    这篇文章主要为大家详细介绍了JavaScript实现网页播放器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 简单三步实现报表页面集成天气

    简单三步实现报表页面集成天气

    本文主要介绍了基于javascript实现报表页面集成天气的方法步骤,简单三步,一看就懂。具有很好的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • JavaScript使用setTimeout实现倒计时效果

    JavaScript使用setTimeout实现倒计时效果

    这篇文章主要为大家详细介绍了JavaScript使用setTimeout实现倒计时效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • 怎么使用js计算当前一周的日期

    怎么使用js计算当前一周的日期

    这篇文章主要给大家介绍了关于怎么使用js计算当前一周的日期的相关资料,我们可以使用JavaScript的Date对象来获取近一周的日期,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-09-09

最新评论