大发体育娱乐在线-大发体育娱乐官方网站-大发体育娱乐登录网址
做最好的网站

JavaScript中常见陷阱小结

来源:http://www.dfwstonefabricators.com 作者:关于计算机 人气:146 发布时间:2019-09-19
摘要:你所创办的具有函数都是分别轻重缓急写的 单引号('字符串')和双引号("字符串")在JavaScript中向来不分外的区分,都得以用来创制字符串.但作为一般标准,大非常多WEB开拓者都选取使用单引

你所创办的具有函数都是分别轻重缓急写的
单引号('字符串')和双引号("字符串")在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)方法垄断(monopoly)类似数组而又不是数组的指标时必须要极其小心,如下

复制代码 代码如下:

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元素举行一些操作
}

你恐怕感兴趣的篇章:

  • JavaScript中for..in循环陷阱介绍
  • 相比好笑的js陷阱题
  • JavaScript品质陷阱小结(附实例表明)
  • Javascript 陷阱 window全局对象
  • JavaScript 存在陷阱 删除某一区域有着节点
  • 救助防止不当的Javascript陷阱清单
  • 荒唐深入分析之JavaScript的9个骗局及评点
  • JavaScript的9个骗局及评点剖判
  • 在JavaScript中碰着级联表达式陷阱
  • JavaScript中常见的多个圈套计算

本文由大发体育娱乐在线发布于关于计算机,转载请注明出处:JavaScript中常见陷阱小结

关键词:

最火资讯