关于对象Object

  1. 对象可以看作一种结构体,键值对的无序集合
  2. 对象的key可以是字符串或者符号,一般为字符串,如果是中间有空格的字符串的话,用单引号或者双引号包括
  3. 对象的value可以是任意值(基本数据类型,函数或者是其它对象)
  4. 获取对象的属性值可以用点语法或者中括号,其中中括号中可以使用变量表达式什么的
  5. 删除属性。delete object.property
  6. 检查属性是否存在 “key” in object
  7. 遍历对象 for(let key in object)
  8. 对象根据引用来赋值或者复制。 变量存的不是对象,而是对象的地址。所有的引用操作(增加,修改,删除属性)都作用于同一个对象
  9. 如果想要生成一个新的对象的话,那么使用新建空对象,通过for循环复制所有的属性值或者是使用Object.assign(resultobj,
    currentObj)来复制。
    Tips:后边的方法是将几个对象集成到第一个接收对象里,后边跟了几个currentObj 前面就接收多少Obj的属性,如果有名字一样的就覆盖
  10. 生成新对象的时候所遇到的问题:
\>1. symbol属性值无法复制(for…in 自动跳过了这个值)
\>2. 如果属性值是对象的话 是新生成了指针指向原对象的属性对象,如果原对象的属性对象有改变的话,会联动新对象改变
  1. 处理方法:
\>1. 使用一个现成的库 lodash,使用其方法_ .cloneDeep(obj) ;
\>2. 使用Reflect.ownKeys,封装方法如下:



function deepCopyOneObject(defaultObj) {
		let resultObject = {};
		Object.assign(resultObject, currentObject);
		for (let key of Reflect.ownKeys(defaultObj)) {
				//关于null返回object的容错处理
				if (defaultObj[key] == null) continue;
				if (typeof(defaultObj[key]) == "object") {
						let propObject = deepCopyOneObject(defaultObj[key]);
						resultObject[key] = propObject;
				}
		}
		return resultObject;
}

javascript