javascript 数组 和其他引用类型

来源:互联网 发布:mac怎么输入货币符号 编辑:程序博客网 时间:2024/06/05 16:36

一.数组

  • 数组的初始化 有两种:var arr = new Array();var arr = [1,2,3,4,5];
  • 在jsz中输出数组的值等价于调用数组的toString方法
  • javascript可以动态的改变数组的长度,并且被截断后的数组后面元素为空。
    <script type="text/javascript">            var arr = [1,2,3,4,5];            document.write(arr);//输出为1,2,3,4,5            arr.length = 2;            document.write(arr);//输出为1,2,            arr.length = 5;            document.write(arr);//输出为1,2,,,    </script>
  • 数组添加元素和移除元素的方法:
    arr.push()//添加元素 返回结果为新数组长度
    arr.pop()//弹出元素 返回值为移除的结果
    arr.shift() //从头部移除一个元素 返回值为移除的元素
    arr.unshift() // 从头部添加 返回值为数组的长度
<script type="text/javascript">            var arr = [1,2,3];            document.write(arr.push(4,5));//输出为5            document.write(arr)//输出为1,2,3,4,5            document.write('-------------');            document.write(arr.pop(1));//输出为5            document.write(arr);//输出为1,2,3, 4            document.write('-------------');            document.write(arr.shift());//输出为1            document.write(arr);//输出为2,3,4            document.write('-------------');            document.write(arr.unshift(6,9));//输出为5            alert(arr)//输出为4        </script><hr/>
  • 数组的其他操作:
    arr.splice(起始位置,截取的个数,第三个以后表示追加) 返回值为移除的元素
    arr.slice(起始位置,截取位置) 不操作数据本身
    arr.concat() 对数组的合并 不操作数组本身
    arr.join(‘-‘)元素之间添加内容,不操作数组本身
    arr.sort()数组排序 操作数组本身 可以接一个函数来自定义比较
    arr.reverse()将数组倒叙排序
    <script type="text/javascript">            var arr1 = [1,2,3];            var arr2 = [4,5,6];            alert(arr1.splice(1, 2, arr2));//输出为2,3            alert(arr1)//输出为1,4,5,6             alert(arr1.slice(1,3));//输出4,5,6            alert(arr1);//1,4,5,6 不操作原本的数组            alert(arr1.concat(arr2));//1,4,5,6,4,5,6            alert(arr2.join('-')); //4-5-6            alert(arr1.sort());//1,4,5,6             alert(arr1.sort(new Function("a","b","return a <b ; ")));//6,5,4,1            alert(arr1.reverse());//4,5,6,1    </script>

注意:alert(arr1.reverse());//4,5,6,1这里输出并不是想象中1,4,5,6。因为splice函数拼接的arr1返回值是[1,arr2],这里的数组是arr2的引用,并不是arr2的拷贝。后面的排序操作只会对[1,arr2[0]]进行比较操作,并不会对arr2内部进行排序。可以想象如果对arr2进行修改,arr1也会改变,因为arr1存取的只是arr2的引用。

二.Object对象

  • Object 对象不能有重复的值
  • 对象的属性可以为函数
    <script type="text/javascript">        var obj = new Object();        obj.name = 'li';        obj.age = 20 ;        obj.say = Function("alert('hehe')");        for(var attribute in obj){            alert(attribute+obj[attribute]);        }    </script>

三.其他引用类型

  • Global对象
    global对象中的方法是属于声明的全局变量的
  • MATH
  • DATE

四.EMAC5 数组的新特性

  • 查找元素
    • arr.indexOf(“4”)查看其索引值
    • arr.indexof(起始位置,所查的参数)
    • arr.lastIndexOf();//查找最后一个
  • 对数组元素的操作:
    • every : 对数组的每一元素行函数的运行 如果都返回true 最后返回true 如果有一个false 则返回false
    • some 有一个true 则返回true
    • filter 对数组进行一个执行,将过滤后的结果返回
    • forEach 循环数组的每一项的值,并执行一个方法
    • map 执行方法 ,并返回结果
    • reduce 并返回结果 遍历
    <script type="text/javascript">    var array =[1,2,3,4,5,6];    var a1 = array.every(function(item,index,array){return item>3;});//true    var a2 = array.some(function(item,index,array){return item>3;});//false    var array1 = array.filter(function(item,index,array){return item>3;});//返回[4,5,6]    var array2 = array.map(function(item,index,array){return item * 2;});//返回[2,4,,6,8,10,12]    //此处不能对 item进行操作 因为item只是一个临时的值,而不是数组的引用。    array.forEach(function(item,index,array){array[index] =  item * 2;});    var a3 = array.reduce(function(prev,cur,index,array){return prev+cur;});//返回42 返回的值存在prev这个变量里    </script>
0 0