做一个幸福的人

登录注册

热门文章

js中遍历数组时,for与for in区别

原文地址:http://www.cnblogs.com/javaee6/p/4142270.html


js中遍历数组的有两种方式

var array=['a']
//标准的for循环
for(var i=1;i<array.length;i++){
    alert(array[i])
}
//foreach循环
for(var i in array){
    alert(array[i])
}

正常情况下上面两种遍历数组的方式结果一样。首先说两者的第一个区别

标准的for循环中的i是number类型,表示的是数组的下标,但是foreach循环中的i表示的是数组的key是string类型,因为js中一切皆为对象。自己试试 alert(typeof i);这个区别是小问题。现在我加上如下代码,上面的执行结果就不一样了。

//扩展了js原生的Array
Array.prototype.test=function()
 
}

试试看上面的代码执行什么。我们发现标准的for循环任然真正的对数组循环, 但是此时foreach循环对我刚才写的test方法写打印出来了。这就是for与foreach遍历数组的最大区别,如果我们在项目采用的是用foreach遍历数组,假设有一天谁不小心自己为了扩展js原生的Array类,或者引入一个外部的js框架也扩展了原生Array。那问题就来了。再此建议两点

  1. 不要用for in遍历数组,全部统一采用标准的for循环变量数组(我们无法保证我们引入的js是否会采用prototype扩展原生的Array)

  2. 如果要对js的原生类扩展的时候,不要采用prototype了


本文章为转载文章,供自我学习使用,如需转载,请注明原文地址:http://www.cnblogs.com/javaee6/p/4142270.html

2016-06-07 16:25:51

js中匿名函数作为变量的简单应用

      下面这个例子可用于前台显示数据之前,对数据进行格式化处理

function out(list,convert){
    var htm="";
    for(var i=0;i<list.length;i++){
        var v = list[i];
        if(convert){
            v = convert(v);
        }
        htm+=v+" ";
    }
    alert(htm);
}
var uf = function(v){
    if(v=="chu"){
        return "ueo";
    }else{
        return v;
    }
}
var list=["a","chu","b","c","chu"];
out(list,uf);

      逆名函数大家都知道怎么回事,对于函数作为参数这种函数式编程也不会陌生。本文主要想表达一个处理问题的思路,数据的层层处理过程。给逆名函数设置参数,有很大的意义与作用,日后编程中应学会灵活利用。

      最后,如果本文对你有帮助或者还有未解决的疑问需要帮助,欢迎加入本站QQ群:323762686

2016-03-05 12:56:41

Mercurial(HG)配置文件.hgignore的写法

使用hg命令进行st查看或者push提交的时候,有些不想向仓库提交的文件,需要在配置文件.hgignore中声明。

基本格式如下:

#.hgignore

#regexp:Regular expression,Python/Per syntax.
#glob:Shell-style glob

#use glob syntax.
syntax:glob
.hgignore
*.sh
*.bac

syntax:regexp
^#*#$


2016-01-08 09:31:45

挺有意义的javascript面试题

function _extend(sub,sup){}

function A(){}

function B(){}


_extend(B,A);

var b=new B();

console.log(b instanceof A);


var c='o',fn;

var test = {a:{c:'a',b:function(){console.log(this.c)}},b:function(){console.log(this.c)},c:'i'};


1、(test.a.b)();//输出结果

2、(fn = test.a.b)();//输出结果

3、test.b(); //输出结果,在不改写源代码,使得test.b()输出new-i

4、test.b.call(test.a);////输出结果



var a='1',b={a:"2"};

function show(){console.log(this.a);}.bind(b);

show();

5、实现Function的bind方法,使show();输出成立

2016-05-11 13:47:57