JS对象的认识与使用

154 阅读3分钟

什么是JavaScript的对象?

有人说:“JavaScript中的所有内容都是对象”(并不是这样,应该说所有内容都可以充当对象),那到底什么是对象呢

对象的定义 JavaScript的对象用于描述现实世界中的某个对象。例如为了描述“小明”,可以为他添加一系列属性
let xiaoming = {
    name : '小明',
    age : 21,
    height : 177
};

上述对象申明了一个 name 属性,值是 '小明'age 属性,值是 22 ,以及其他一些属性。最后,把这个对象赋值给变量 xiaoming 后,就可以通过变量 xiaoming 来获取小明的属性了:

xiaoming.name; //小明
xiaoming.age; //21

声明对象

//以下是规范写法
let obj = new Object({'属性名':'属性值','属性名':'属性值'}) //逗号隔开

//以下是简写写法
let obj2 = {'属性名':'属性值','属性名':'属性值'}
  • 属性名在遵守标识符命名规则的情况下可以不加引号:
//如果属性名是数值,可以不加引号,但它会自动转换为字符串
let obj = {
  1: 'a',
  3.2: 'b',
  1e2: true,
  1e-2: true,
  .234: true,
  0xFF: true
};
//但属性名最终都会变成字符串!!
// obj {
// Object.keys(obj)
// => ["1", "100", "255", "3.2", "0.01", "0.234"]
属性名成为字符串
  • 属性名在不遵守标识符命名规则的情况下会报错: 不遵守命名规则报错
//如果不符合标识符命名规范,就需要为属性名加上引号
let obj = {
  '1+2':3,
  '1a':'1a'
}
  • 变量可以作为属性名:
let p1 = 'name'
let obj = {
  [p1]:'xiaoming',
}
变量作属性名

可见 p1 是一个字符串类型的变量,值为 'name'

我们定义对象时,属性名被中括号包裹起来了,这是当属性名为变量时的一个写法。属性名是变量的值( name )

删除对象的属性

//我们先声明一个对象

let obj = {
  name : 'xiaoming',
  age : 21
}

delete obj.name     //删除name属性,方法一
delete obj['name']  //删除name属性,方法二

查看对象的属性

先创建一个对象:

let obj = {
  name: "xiaoming",
  age: 21
};
  • 查看自身属性
Object.keys(obj);
  • 查看自身属性+共有属性
console.dir(obj);
  • 判读一个属性是自身属性还是共有属性
obj.hasOwnProperty('toString')

如何修改或增加对象的属性

//定义之后增加对象的属性
let obj = {
  name: "xiaoming"
};
obj.age = 21;

//定义之后修改对象属性的属性值
obj.name = "xiao";
obj.age = "20";

//或者批量一起修改 可以用Object提供的assign属性
Object.assign(obj, { name: "xiaoming", age: 21 });
添加属性

'name' in obj 和 obj.hasOwnProperty('name') 的区别

'name' in obj 是查看 name 这个属性名是否在对象中,出现 false 时,则表示不含有属性名。当查看 'toString' in objtoString 为隐藏属性)时也返回 true ,所以隐藏属性也能用它查看

使用 obj.hasOwnproperty('name') 查看 obj 这个对象是否存在 name 属性的时,返回 true ,当我们用它来查看 toString 时,打印 false ,说明这个方法只能查看实例对象的属性,不能查看原型链上的属性。

所以可以综合以上两种方法,来判断某一属性是共有属性还是自身的属性。 不同方法查看属性的区别

本文参考摘录了:

  1. 使用对象- JavaScript | MDN
  2. JS中一切都是对象吗?看这一篇就知道了
  3. 廖雪峰的官方网站
  4. JS 对象基本用法(Object)
  5. 《JS 对象基本用法》