对象(复杂数据类型)

86 阅读2分钟

对象

他只是一个存储 基本数据类型的集合

  • 对象的花括号中书写的不是代码, 而是键值对格式的数据
  • 键值对 --- key/value --- 属性名:属性值
  • 冒号左边的统称为: 键/key/属性名
  • 右边统称为: 值/value/属性值
  • 对象 这个数据结构 将来开发中经常会使用
    1. 用户详情
    2. 商品详情
    3. 文章详情
        var obj = {
            num: 1,
            sum: 10086,
            name: '张三',
            age: 18,
            bo1: true,
            bo2: false
        }

        console.log(obj)
对象的创建
        var obj1 = {}   // 字面量的方式创建
        console.log(obj1)
        var obj2 = new Object()     // 内置的构造函数的方式创建
        console.log(obj2)
对象的操作 (增删改查)
        var obj = {
            name: '张三',
            id: 'QF001'
        }
        console.log('原本的对象: ', obj)

        // 2.1 增       对象名.新的属性名 = 对应的属性值
        obj.age = 18

        // 2.2 删    delete 对象名.要删除的属性名
        delete obj.id

        // 2.3 改   对象名.要修改属性值的属性名 = 新的属性值
        obj.name = '张三丰'
        
        console.log('操作后的对象: ', obj)

        // 2.4 查   对象名.要查询的属性名       会得到对应的属性值
        console.log(obj.name)
中括号语法 (数组语法)
        var obj = {
            name: '张三',
            id: 'QF001'
        }
        console.log('原对象: ', obj)

        // 增   对象名['要新增的属性名'] = 对应的属性值
        obj['age'] = 18


        // 删   delete 对象名['要删除的属性名']
        delete obj['id']

        // 改   对象名['要修改的属性名'] = 新的属性值
        obj['name'] = '李四'


        console.log('操作后的对象: ', obj)

        // 查   对象名['要查询的属性名']        会得到对应的属性值
        console.log(obj['name'])

  • 对象点语法中括号语法的区别

    • 只要正常情况, 对象的属性名符合变量的命名规则与规范的情况下, 使用点语法或者中括号语法 没有任何区别
    • 但是在遇到一些特殊的属性名的时候 就要更换了, 比如说属性名为数字
    • 还有一种情况, 属性名想要使用变量的时候, 也需要使用中括号语法
        var obj = {
            0: '数字0',
            1: '数字1',
            2: '数字2',
            name: '张三'
        }

        // console.log(obj)
        // // console.log(obj.0)   // 语法不允许
        // console.log(obj[0])


        // console.log(obj.name)
        // console.log(obj['name'])

        var myName = 'name'

        // console.log(myName) // 'name'

        console.log(obj.myName)
        /**
         *  在 JS 中, 对象的点语法, 会将 . 后边的 这个单词/属性 视为一个普通字符串
         *      而不会当成一个变量
         * 
         *  所以现在相当于 去 对象 obj 中 查找一个 属性名为 myName 的键值对
         *  但是对象中并没有, 所以得到了一个 undefined
         * 
         *  要是想当一个变量使用, 必须使用 中括号语法, 而且不能加引号
         *      如果加了引号, 那么就是当一个字符串去使用, 结果和上述的点语法相同
         *  只有不加引号, 才会是当一个变量去使用
         * 
         * 
         * 我推荐
         *      正常情况下全都使用 点语法
         *      涉及到变量的时候 使用 中括号语法
        */

        console.log(obj['myName'])
        console.log(obj[myName])