• JS学习专辑(5) 对象和数组


    接下来看一看对象和数组,首先创建对象来说,用最简单的方式就是使用对象直接量。对象直接量是一个表达式,表达式每次创建都创建并初始化一个新的对象。

    第二种方法是用new创建一个新的对象,还有一种方法用object.create()方法这是一个静态函数,只需要传入原型对象就可以。下面是3个分别创建的例子:

    View Code
    var a={};                      //没属性的对象
    var b={x:1,y:1};          //两个属性的对象
    var c={"x y":"jk",}      //属性名中有空格、“-”字符的要用字符串表示
    
    
    var d=new Object();  //创建一个新的空对象和a一样
    var e=new Array();    //创建一个数组对象
    
    
    var f=Object.create({x:1,y:1});    //f继承了x y属性
    var g=Object.create(null);            //没有任何的属性和方法,基础方法也没有(比如toString)
    var h=Object.create(Object.prototype);    //空对象和a,d一样

    同时可以通过原型来创建新对象,可以模拟原型继承,这样对象就可以继承。这个东西貌似还挺有用的。下面有一个抄来的例子可以返回一个继承的新对象:

    View Code
    //返回了一个继承自原型对象p的属性的新对象
    function inherit(p){
        if(p==null) throw TypeError();
        if(Object.Create)
            return Object.create(p);
        var t=typeof p;
        if(t!=="object"&&t!=="fuction")
        function f() {};
        f.prototype=p;
        return new f();
    }

    查询和设置很简单就是通过(.)或者([])来获取设置值。用点的话就和平常的C#是一样的,只能访问固定属性,用方括号的话里面是一个计算结果为字符串的表达式,可以在程序运行时创建和修改他们。当想查询对象中没有的属性的时候会返回undefined。

    删除也就是通过delete来删除,但是只能删除自身属性,不能删除继承属性(如果要删除继承属性就要去原型上删除它,但这会影响很多)。

    如果判断是否一个属性在某个对象中就用in运算符(查看对象的自有或继承的属性),hasOwnProperty()(查看自有属性)和propertyIsEnumerable()(查看自有且可枚举属性-枚举属性的话就是代码里面给对象添加的属性是可以枚举的,对象继承的内置方法是不可枚举的)来检测。

    JS的对象中也有getter()和setter()的存取器(不过貌似应该不怎么用吧,好吧我不知道):

    View Code
    var o={
      x:1,  //普通属性
    
      //带get和set的存取器
      getter a{...},
      setter a(value){...},       
    }

    对象还可以通过JSON来序列化和反序列化,一般用的是JSON.stringify()和JSON.parse()来序列化和反序列化,或者还可以用eval()来解析JSON的字符串,下面写了几个简单的例子:

    View Code
    var a={x:1,y:2};
    var b=new Date();
    var c={x:1,y:2,z:3};
    var d=JSON.stringify(a);
    
    console.log(JSON.stringify(a));  //只能序列化可枚举的自有属性
    console.log(b.toJSON());  //结果是ISO格式的日期字符串
    console.log(JSON.stringify(c,["y"])); //可以过滤你不想要的属性
    
    console.log(JSON.parse(d));    //反序列化自有属性
    
    var e=eval("("+d+")"); //用eval()来解析JSON的字符串
    console.log(e);

    上面的例子的输出结果为:

    ————————————————华丽的分割线——————————————————

    上面说了一些对象的东西,然后再是数组,首先还是创建,创建数组和对象其实没有什么很大的区别,最多就是用[]来代替{}或者可以var a=new Array();来创建。数组中可以使用不同的元素比如:var a=[1,true,"jk",]而且可以有可选的结尾逗号,所以a只有3个元素。

    数组是通过[]来访问和读写这个数组的某个元素的,比如var a=b[0];(读)var b[0]=1;(写),JS中可以使用负数和非整数来索引数组,和对象一样,如果想查询数组中没有的属性的时候同样会返回undefined。

    数组添加的话最简单的方法就是赋值:var a=[];a[0]="1";或者用push()或者unshift()的方法在末尾或者头部添加。其实数组有很多的方法,下面有一些简单例子:

    View Code
    var a=["1",1];
    a[1]=2;
    a.push(3,4);    //在尾部加入元素
    a.pop();    //删除尾部第一个的元素
    a.unshift("-1",0);    //在头部加入元素
    a.shift();    //删除头部第一个元素
    console.log(a);    //[0,'1',2,3]
    
    var b=a.join("-"); //将元素转化为字符串并连接在一起
    console.log(b);    //1-2-3
    
    var c=a.reverse();    //颠倒元素顺序
    console.log(c);    //[3,2,'1']
    
    var d=c.sort();    //元素排序
    console.log(d);    //['1',2,3]
    
    var e=d.concat(4,5,[6,7]);    //连接数组
    console.log(e);    //['1',2,3,4,5,6,7]
    
    var f=e.slice(0,2);    //这个表示从第一个参数位置开始到第二个参数(不包含第二个参数)结束的所有数组元素
    var g=e.slice(-3,-1);    //如果是负数,则是表示相对于数组最后一个元素的位置
    console.log(f);    //['1',2]
    console.log(g);    //[5,6]
    
    var h=e.splice(3,2);    //删除第一个参数位置开始的第二个参数的个数
    var i=e.splice(3,0,[4,5]);    //插入第一个参数位置开始的第三个参数的元素
    console.log(h);    //[4,5] e是['1',2,3,6,7]
    console.log(e);    //['1',2,3,[4,5],6,7]
    
    var j=e.indexOf(2);    //搜索整个数组的具有给定值的元素,返回第一个元素的索引,从第一个开始搜索
    var k=e.lastIndexOf(6);    //和上面一个一样 只不过是从最后一个开始搜索
    console.log(j);    //2
    console.log(k);    //5

    遍历数组就是通过for的方法来遍历。这个很简单:

    View Code
    var a=["1",1];
    for(var i=0;i<a.length;i++){
        console.log(a[i]);
    }
    for(var i in a){
        console.log(a[i]);
    }

    最后在字符串中,也可以像类似于数组的访问,使得其更加方便:

    View Code
    var s=test;
    s.charAt(0);    //"t"
    s[1]    //"e"

    对象和数组我觉得这点东西是比较基础的一些知识,然后接来下就是要看函数、类了。

  • 相关阅读:
    C# 使用 sid 连接 Oracle(无需安装 Oracle 客户端)
    命令模式(Command Pattern)
    仅仅使用Google就完成了人生第一次破解
    GeoServer跨域问题
    List与DataTable相互转换
    GeoServer2.14.1修改端口
    坐标转换C#(Gcj02、wgs84、bd09互转)
    nginx启动报错(1113: No mapping for the Unicode character exists in the target multi-byte code page)
    C# 操作 Mongodb
    DocumentFormat.OpenXml导出word合并(文件被另一个进程占用)
  • 原文地址:https://www.cnblogs.com/socialdk/p/3034785.html
Copyright © 2020-2023  润新知