对象的应用

103 阅读2分钟

前言

重学js

/***
 * 定义
 */ 
对象可看作是属性的无序集合,类似的数据结构还包括 散列(hash),散列表(hashtable), 字典(dict),关联数组(associ)
/***
 * 分类
 */
1. 内置对象
2. 宿主对象
3. 自定义对象

/**
 * 声明方式
 * */ 
1.直接量 2.new 3.Object.create 
/**
 * api汇总
 */ 
Object.assign()
Object.create()
Object.defineProperty()
Object.defineProperties()
Object.entries() // 返回一个给定对象自身可枚举属性的键值对数组
Object.freeze() // 不能修改数组,只能查
Object.isFrozen() // 是否冻结
Object.fromEntries() // 方法把键值对列表(如二维数组,Map对象)转换为一个对象。
Object.getOwnPropertyDescriptor() // 返回自有属性和描述
Object.getOwnPropertyDescriptors() // 返回自有属性和描述
Object.getOwnPropertyNames() // 包括不可枚举属性但不包括Symbol值作为名称的属性
Object.getOwnPropertySymbols() // 返回一个给定对象自身的所有 Symbol 属性的数组
Object.getPrototypeOf(object) // 返回其原型的对象。
Object.is(null, undefined) // 全等比较2个值是否相等
Object.isExtensible()  // 是否可以在它上面添加新的属性
Object.keys() // 返回一个由一个给定对象的自身可枚举属性组成的数组
Object.prototype.hasOwnProperty() // 自身属性中是否具有指定的属性
Object.prototype.isPrototypeOf() // 你检查一个对象是否存在于另一个对象的原型链上。
Object.prototype.toString() // 可以覆盖
/**
 * 单词量汇总
*/
hash
hashtable
dictionary
associative
prototypal
inheritance
query
enumerate
writable
attribute
configurable
prototype
isPrototypeOf
host
native
own
extensible
empty
first
constructor
throw
customer
undefined
extend
merge
subtract

/**
 * 疑问注意点区别
 */ 
// 问题1: create函数是否,继承对象是否继承Object.prototype
var p = {a: '你好世界'}
var obj = Object.create(p)
console.log(obj.a,obj.b)
p.b = 'bbbb'
console.log(obj.a,obj.b)
// 答案: 会继承,并且可以动态修改

// 问题2: 继承属性是否可以遍历
var p = Object.create({b: '666'})
p.a = '你好世界'
var obj = Object.create(p)
obj.j = '自由1'
obj.c = '自由2'
for (var key in obj) {
    console.log('拿到key', key)
}
var keys = Object.keys(obj)
console.log(keys)
// 答案: 如果继承对象没有禁止可以遍历则可以遍历

// 问题3: 对象属性特性,可配置属性的作用configurable
var o = {}
Object.defineProperty(o, 'x', {
    value: 1,
    writable: true,
    enumerable: false,
    configurable: false
})
console.log('o', o)
Object.defineProperty(o, 'x', {writable: false})
// 答案1: 如果是直接赋值{a: 1}那么a的属性特性默认都是 true
// 答案2: 如果是Object.defineProperty(o, 'x' ,{value: ''1}),不赋予其他值,则其他默认属性特性是false这里与上面直接量配置有区别
// 答案3: configurable的作用1是直接控制enumerable属性是否可以修改
// 答案4: configurable的作用2是控制writable属性由false变为true的过程,而writable属性由true变为false的过程不与他控制可自由

// in , instanceof, isPrototypeOf 会检测哪些属性,for in 会遍历继承对象吗
// 答案1: 会检测自有和继承属性
// 答案2: 会遍历继承对象,除非继承属性设置啦不可枚举


// toString 与 valueOf 何 toJSON的特殊转换知识
/**
 * 巧用的方式
*/