总结JS对象的基本用法~

声明对象

两个最基本的声明对象方式:

字面量声明

字面量声明方法是Object构造函数创建对象方法的简写形式

var Student={}; 

var Student={'name':"moji",'age':21}

Object构造函数创建

var Student = new Object ({ 'name':"moji",'age':21 });

Person.gender = 'female';
  • 两种方法的缺点是同一个接口创建很多对象和,会产生大量的重复代码
  • 👉更多声明对象的方法 参考博客:JS创建对象的几种方法

属性名和属性值

属性名

  • 键名(属性名)是字符串,不是标识符,可以包含任意字符

  • 引号可省略,省略之后就只能写标识符,但键名也还是字符串

  • 保险情况下要加上引号,比如 属性名为1e2,js会先转化为100,再加上“”,属性名就变为“100”

    let obj = {
      1: 'a',
      3.2: 'b',
      1e2: true,
      1e-2: true,
      .234: true,
      0xFF: true
    };
    Object.keys(obj)
    => ["1", "100", "255", "3.2", "0.01", "0.234"]
    
  • Object.keys(obj) 可以得到 obj 的所有 key

  • 属性名新方法:可以用变量做属性名,[a]代表变量a

    let p1 = 'name'
    let obj = { p1 : 'moji'} //属性名为 'p1',不加 [ ] 的属性名会自动变成字符串
    let obj = { [p1] : 'moji' } //属性名为 'name',加了 [ ] 则会当做变量求值
    

隐藏属性

JS 中每一个对象都有一个隐藏属性(__proto__)储存着共有属性组成的对象(原型)的地址

读属性

读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符。

object[变量] 方括号中可以放变量,.点运算符后面的会直接变字符串

var obj = {
  p: 'Hello World'
};

obj.p // "Hello World"
obj['p'] // "Hello World"
  • 使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理!!!
方法 说明
Object.keys(obj) 查看自身所有属性名
Object.values(obj) 查看自身所有属性值
Object.entries(obj) 查看自身所有属性名+属性值组成的键值对
console.dir(obj) 查看自身+共有属性

写属性

修改或增加属性

直接赋值

点运算符和方括号运算符,不仅可以用来读取值,还可以用来赋值

let obj = {name: 'moji'} // name 是字符串
obj.name = 'moji' 
obj['name'] = 'moji' // name 是字符串
obj['na'+'me'] = 'moji'
let key = 'name'; 
let key = 'name';//obj.key 等价于 obj['key']
obj[key] = 'moji'

批量赋值

使用assign方法

Object.assign(obj, {age: 18, gender: 'female'})

无法通过对象自身来修改或增加共有属性,可以对obj.__proto__.Object.prototype的共有属性赋值来改变(不推荐),推荐使用 Object.create来从创造对象起就指定修改其原型。

删属性

使用delete 命令 ,delete命令用于删除对象的属性,删除成功后返回true

delete obj.xxx 
delete obj['xxx']
  • 删除一个不存在的属性,delete不报错,而且返回true
  • 删除后再读取该属性的值为undefined
  • delete命令只能删除对象本身的属性,无法删除继承的属性

判断

in 运算符

in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。它的左边是一个字符串,表示属性名,右边是一个对象。

var obj = {'name' : 'moji' };
'name' in obj // true
'toString' in obj // true

hasOwnProperty()

使用hasOwnProperty判断是否为对象自身的属性,是自身特定的属性返回true,是原型链上的属性返回false

obj.hasOwnProperty('toString') // false

属性的遍历

除了上面说到的Object.keys(obj)、Object.values(obj)、Object.entries(obj)、console.dir(obj),还可以使用for…in循环来遍历对象,得到属性值和属性名

var obj = {'name': 'moji', 'age': 21 };

for (var i in obj) {
  console.log('键名:', i);
  console.log('键值:', obj[i]);
}
// 键名: name
// 键值: moji
// 键名: age
// 键值: 21

关于数组的遍历,以后再总结~