zoukankan      html  css  js  c++  java
  • JS中的对象

      对象

    概念:简单说,所谓对象,就是一种无序的数据集合,有若干个“键值对”(key-value)构成。

    var obj = {
        name : 'tom',
        sex : 'man'
    };
    

    上面代码中,大括号就定义了一个对象,这是一种字面量的写法,它被复制给变量 obj 。 这个对象内部包含了一个键值对(又称为“成员”), name 和 sex 是“键名”(成员的名称),字符串“tom”和“man”是“键值”(成员的值)。键名和键值之间用冒号分割。如果对象内部包含多个键值对,每个键值对之间用逗号分割。

      键名

    对象的所有键名都是字符串,可以加引号也可以不加引号。如果键名是数值,会被自动转换成字符串。

    var o = {
        1 : 'a',
        3.2 : 'b'
    }
    

      上面以数值作为键名都会转换成字符串

    如果键名不符合标识符的命名规则(比如第一个字符为数字,或者含有空格或运算符),也不是数字,则必须加上引号,否则会报错。

    var o ={
        '1p' : "Hellow World",
        'h w' : "Hellow World",
        'p+q' : 'Hellow World'
    };
    

      上面的键值不符合标识符的命名规则,所以必须要加引号

    对象的每一个“键名”又称为“属性”(property),它的“键值”可以是任何的数据类型。如果一个属性的值为函数,通畅把这个属性成为“方法”,它可以像函数那样调用。

    var obj = {
        p: function(){...}
    };

      关于属性的操作

    对象的属性有两种方法可以读取:

    var obj = {
        name: 'tom',
        sex:'man'
    };
    obj.name  //"tom"
    obj['sex']  //"man"

      可以通过对象名后面加点“.”的方式,也可以对象名后面加['']。

      注意:如果键名是数值的话,不能用“.”的方式获取对象的属性,这样会报错,而用方括号的方式引号加不加上都可以。

    对象的属性可以动态的创建

    var obj = {
        name: 'tom',
        sex:'man'
    };
    
    obj.age = 20;
    obj.age    //20

      上面代码对对象动态创建了一个属性且赋值。

      对象的操作

    1)查看所有属性

    可以用 Object.keys 方法查看对象的所有属性。

    var obj = {
        name: 'tom',
        sex:'man'
    };
    
    Object.keys(obj)    //["name", "sex"]

    2)删除对象的属性

    用delete方法可以删除对象的属性,删除成功后返回true。

    var obj = {
        name: 'tom',
        sex:'man'
    };
    
    delete obj.sex  //true
    obj.sex  //undefined
    Object.keys(obj)  //["name"]

    注意!删除一个本来就没有的属性是不会报错的,还是会返回true

    3)in运算符

    in运算符可以检查对象是否包含某种属性,如果包含返回true,反之返回false。

    var obj = {
        name: 'tom',
        sex:'man'
    };
    
    'name' in obj    //true

    4)for...in 循环

    for...in 循环可以遍历对象的所有属性

    var obj = {
        name: 'tom',
        sex:'man'
    };
    
    for(var keys in obj){
        console.log(obj[i]);
    }
    
    //"tom"
    //"man"

      其他要点

    对象的引用

    如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量。

    var o1 = {};
    var o2 = o1;
    
    o1.a = 1;
    console.log(o2.a);    //1
    
    o2.b = 2;
    console.log(o2.b);    //2

    上面代码中,o1o2指向同一个对象,因此为其中任何一个变量添加属性,另一个变量都可以读写该属性。

    此时,如果取消某一个变量对于原对象的引用,不会影响到另一个变量。

    var o1 = {};
    var o2 = o1;
    
    o1 = 1;
    o2 // {}

    上面代码中,o1o2指向同一个对象,然后o1的值变为1,这时不会对o2产生影响,o2还是指向原来的那个对象。

    但是,这种引用只局限于对象,如果两个变量指向同一个原始类型的值。那么,变量这时都是值的拷贝。

    var x = 1;
    var y = x;
    
    x = 2;
    y // 1

    上面的代码中,当x的值发生变化后,y的值并不变,这就表示yx并不是指向同一个内存地址。

    参考资料:http://javascript.ruanyifeng.com/grammar/object.html#toc4

  • 相关阅读:
    Weblogic部署项目过程中的一些问题
    Weblogic部署项目三种方式
    weblogic的下载安装及myeclipse的配置
    浅谈WebLogic和Tomcat
    完全卸载MySQL重新安装MySQL
    服务器部署多个tomcat经验
    Java中的Bigdecimal类型运算
    微信APP支付Java后端回调处理
    mapreduce运行的bug收录
    重装java后hadoop配置文件的修改
  • 原文地址:https://www.cnblogs.com/ianyanyzx/p/9225751.html
Copyright © 2011-2022 走看看