JS对象基础语法

129 阅读2分钟

对象是无序的数据集合,是键值对的合集。 它的键值对数量不固定,所以存储在堆内存中,方便增删改查。

声明对象的两种语法😊

  • let obj = new Object{}规范的写法
  • let obj = {} 简写

属性名(property)和属性值(value)

属性名采用 'name': chypre这样的写法。 要注意属性名无论何时都是一段字符串! 如果键值不是字符串,会发生什么?会进行运算,再把运算结果转成字符串。 (在很少的情况下,Symbol也可作为属性名,在迭代时可以用到)

let obj = new Object();
obj.name = 'Alice'; // let obj['name'] = 'Alice';

obj[name] = 'Alice';
// name here is a variable
// error: name is not defined

隐藏属性与原型

每个对象都有一个隐藏属性__proto__,这个隐藏属性储存着所有对象的共有属性的地址,称为原型

删除属性的方法

  • delete obj.name
  • delete obj['name']
  • obj.name = undefined;此操作不会删除属性,而是将属性设置为undefined。
  • 注:使用delete关键词删除,无论该属性是否存在都不会报错。

查看obj属性的方法

  • Object.keys(obj)
  • Object.values(obj)
  • Object.entries(obj)
  • console.dir(obj)可以以目录的形式打印
  • obj.__proto__不推荐该用法,__proto__是隐藏属性,不要这样调用。 查看属性是否存在的方法:
  • toSring in obj属性只要存在就为true
  • obj.hasOwnProperty('toSting')隐藏属性不算哦~

增加或修改属性的方法

  • Object.assign(obj, {k1: v1, k2: v2 ...})批量赋值属性
  • Object.prototype.toString = 'new function'直接修改原型

以obj为原型创建对象

let obj = new Object({k1: v1, k2: v2})
let obj2 = Object.create(obj)

obj2的隐藏属性__proto__就会指向obj,obj的隐藏属性__proto__就会指向Object.prototype。这就是原型链。请在生成时就决定好原型链,而不是在使用中随意修改,以免影响性能。