JavaScript——对象之初探

初探对象

(一)定义:

  • 无序的数据集合
  • 声明方式:es6

    • let obj = new Object();
    • let obj = { };

(二)属性名

  • Object.keys (obj):能够获得obj的全部属性名
  • 变量做为属性名:
let a='name'
var obj = {    a: jack;    //属性名为'a'}
var obj2 = {    [a]: jack; //属性名为'name'}
  • 对比:不加[]的属性名会自动变成字符串;反之则会当成变量求值;值若是不是字符串则自动转换为字符串

(三)对象的隐藏属性

  • JS中每个对象都有一个隐藏属性
  • 这个隐藏属性储存这个对象的共有属性组成的对象的地址
  • 这个共有属性组成的对象就叫作原型。
  • 也就是说隐藏属性储存原型的地址。
  • 由于原型实际上是共有属性组成的对象,因此原型也是一个对象,因此原型也有它的原型。

(四)属性的增删改查

1)删除

  • delete obj.xxx:删除obj中的xxx属性
  • 'xxx' in obj:若xxx在obj中返回true,不然返回false
  • obj.xxx === undefined prototype

    • 结论:不能证实xxx是否为obj的属性
    • 缘由:xxx属性可能不存在,或者xxx属性存在可是值为undefined

2)查看

  • Object.keys(obj):查看自身全部属性名code

    • Object.values(obj):查看自身全部属性值
    • Object.entries(obj):查看全部属性和值
  • console.dir(obj):以目录形式查看自身+共有属性
  • 判断一个属性是不是自身的属性(非共有属性):obj.hasOwnProperty('xxx')
  • 查看属性对象

    • obj.xxx
    • obj['xxx']:与第一种等价
    • obj[xxx]:xxx为变量,与上述两种彻底无关

一道代码题区分开上述三种状况:字符串

let list = ['name', 'age', 'gender']
        let person = {
            name: 'frank', age: 18, gender: 'man'
        }
        for (let i = 0; i < list.length; i++) {
            let name = list[i]
            console.log(???) // 这里 ??? 替换成什么使person全部属性被打印出来
        }
        // 1.console.log(person.name) 2.console.log(person[name])
        // 答案:console.log(person[name])

3)增改

  • 直接赋值:obj.name="xxx";
  • 批量赋值:
//es6新增语法,推荐使用
Object.assign(obj,{ name: xxx, age: xxx , gender: xxx })
  • 没法经过自身修改或修改原型:原型

    • obj.toString='xxx';只会做用在obj自身属性上
  • 修改原型:console

    • 修改obj.__proto__:不推荐
    • 必需要修改能够用Object.prototype
  • 将一个对象的原型设置为另外一个对象:变量

    1. let obj2.__proto__ = obj (不推荐)
    2. let obj2 = Object.create( obj ) :推荐,es6新写法,效果等同于第一种、
    3. create配合assign建立对象

4)一些问题

  • 'x' in objobj.hasOwnProperty('x')的区别:语法

    • 'xxx' in obj只能检查xxx是否在obj中而没法区分是不是自身属性
    • 相反地obj.hasOwnProperty()能够对自身属性进行区分并返回true,非自身属性返回false
  • Object.create和new Object()的区别:
// a中的name为原型中的属性
var a = Object.create ({ name: 'A' });
    //b中的name为自身的属性
var b = new Object ({ name:'A' })
相关文章
相关标签/搜索