js对象

132 阅读2分钟

1. 对象基础

什么是对象

对象: 是js中的一种数据类型,是复杂数据类型
对象是一个数据的集合,无序数据集合
对象也叫做 键值对集合

对象存储数据的形式

对象存储数据的形式:键值对形式存储。
一组键值对组成了对象中的一个数据成员。对象中如果有多个数据成员(键值对),则使用逗号分隔

1)对象中的键名: 也叫做对象的属性名,属性名必须是字符串数据类型。
属性名可以加引号,也可以不加引号书写,对象中属性名是唯一的(不能重复)

2)对象中的键值: 可以是任意数据类型的值

2. 创建对象

两种创建对象的方式:

     1. 字面量创建对象 (使用频率比较高)
         语法: var obj = {name:'zs',age:10};
         
     2. 使用内置构造函数创建对象
         Object()是内置的构造函数,通过new 的方式调用该函数,可以创建对象
         语法1: var obj1 = new Object()   // 创建空对象
         语法2: var obj1 = new Object({a: 1, b: 2})  // 创建一个具有属性或者说具有键值对的 对象

3. 操作对象的成员

1. 添加 对象成员

    1) 点语法: 对象.属性名 = 值     
       var obj = new Object();
       obj.name = 'zs';
       obj.age = 17;
       
    2) 数组关联法: 对象['属性名'] = 值  
     使用数组关联法: [] 里面的属性名必须加引号
       var per = {};  
       per['name'] = 'zs';
       per['age'] = 20;
           

2. 修改对象对应的成员的值

    - 点语法:   对象.属性名 = 值     
      obj.name = 'lisi'
    - 数组关联法: 对象['属性名'] = 值
      delete per['age']
      

3. 访问对象成员

    如果对象成员没有这个属性名,则值为undefined
    
    - 点语法: 对象.属性名
      console.log( obj.name ) // 'zs'    
      console.log( obj.abcd ) // undefined 
      
    - 数组关联法: 对象['属性名']
       console.log( per['name'] ) // lisi
       console.log( per['xyz'] ) // undefined  对象没有xyz这个属性名
      

4. 删除对象成员

        - 点语法:   delete 对象.属性名
                    delete obj.age;
                    
        - 数组关联法: delete 对象['属性名']
                     delete per['age']
        

特殊情况

     *  一般大部分情况下, 点语法与中括号语法, 作用相同, 怎么选择都可以
     * 
     *      特殊情况下我们需要使用中括号语法
     *          1. 对象的属性名, 有纯数字或者特殊符号, 这个时候, 就只能使用中括号语法
     *          2. 如果涉及变量相关的时候, 也需要使用中括号
    */

    // 特殊情况1
     var obj = {
         100: '我的属性名是 纯数字 100',
         '!': '我的属性名是 特殊符号 !',
         '@': '我的属性名是 特殊符号 @'
     }

    此时不能使用点语法, 使用中括号语法
    console.log(obj.100)     //报错
    console.log(obj.!)       //报错
    console.log(obj.@)       //报错
    console.log(obj[100])    //我的属性名是 纯数字 100
    console.log(obj['100'])  //我的属性名是 纯数字 100
    console.log(obj['!'])    //我的属性名是 特殊符号 !
    console.log(obj['@'])    //我的属性名是 特殊符号 @