JS Array类型及其方法深究

ECMAScript中的数组与其他语言有着相当大的区别,虽然ECMAScript中的数组和其他语言中的数组都是数据的有序列表,但是与其他语言不同的是,ECMAScript数组的每一项 可以保存任何类型的数据。数组的第一个位置来保存字符串,用第二个位置来保存数值,用第三个位置来保存对象。ECMAScript数组的大小是可以动态调整的,可以随着数据的添加自动增长以容纳新增数组。
数组内置方法的实现:
1.every()方法
作用:对数组中的每一项运行给定的函数,如果函数的每一项都返回true,则返回true

 Array.prototype.every = function(input){//prototype用于继承该种方法var out = [];
            if(typeof input == 'function'){//判断传入的参数是否是一个函数
                for(var i = 0;i<this.length;i++){
                var flag = input(this[i],i,this);
                if(!flag){
                    console.log(out);
                    return false;//数组第三项返回false,输出前几项满足条件组成的数组
                }
                else{
                    out.push(this[i]);
                }

              }
            }

            console.log(out);
        };
         var array = [3,5,1,6,7,0];
        array.every( function input(item,index,array){
            return (item>2);
         });

理解JavaScript中无重载

先用Java的方法和JS函数比较一下:

Java:

通过方法签名来唯一确定一个方法。所谓方法签名(包括方法名,参数类型,参数顺序和参数个数几个要素),所以,如果两个方法名称相同,但是只要其他要素(例如:参数类型,参数个数)不同,编译器就会认为是不同的函数。从而存在同名的不同方法,导致重载现象。

JavaScript:

函数(或对象方法)完全靠函数名称唯一确定,JS不将参数列表作为区分函数的依据。更关键的是,在JS中,函数是作为一种特殊对象类型存在的,函数的名字只是一个普通变量,保存了指向函数的地址。本质与var a = 1;中的变量a没什么区别。但是如果你先后定义了两个同名函数,实际上,相当于先后将两个函数对象绑定到同一个变量上所以,后者必然覆盖前者,不会共存,也就自然不会有重载现象了

代码举例:
    function add(num1,num2,num3){
            console.log(num1+num2+num3);
            return;
        }

        function add(num1,num2){
            console.log(num1+num2);
            return;
        }
        add(1,2);//3
        add(1,2,3);//3

后面的函数覆盖了前面的函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值