《JS 对象基本用法》

140 阅读2分钟

声明对象的两种语法

1.let obj = {'name': 'jiangjiang', 'age':18}

常用简写方法,【这个obj是对象名,对象名不是必须叫obj】

2.let obj = new Object({'name': 'jiangjiang', 'age': 21})

最最最正确的写法!但是一般不用

let 对象名=new Object({'键名(属性名)':'键值(属性值)',...,...})

键名可以包含任何字符,'键名'的引号可以省略,但最好不省略以避免出错。

注意: 键名不管有没有加引号都是字符串!!!

Object.keys(obj)可以获得名为obj的对象的所有键名(属性名)(key)!

如何删除对象的属性

方法1.delete obj.xxx

方法2.delete obj['xxx']

如何查看对象的属性

  • 查看自身所有属性:Object.keys(obj)

  • 查看自身+共有属性:console.dir(obj)或者 用Object.keys打印出obj._ _ proto_ _

  • 如何判断一个属性是自身的还是共有的: obj.hasOwnProperty('XXX')

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

  • 修改 改自身属性

改单个属性的属性值:obj['name']='河马'

批量修改属性的属性值:

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

改共有属性: 无法通过自身修改或增加共有属性,共有属性只是可读而不可改

let obj = {name: 'Tom'};
Object.prototype['toString']='xxx';
obj.toString     //'xxx'

改隐藏属性: let obj = Object.create(common) Object.create(common)修改的是原型属性

let common = {hairColor: 'black', country: '中国'};
let obj = Object.create(common);
obj.name = '张三';
let obj2 = Object.create(common);
obj2.name = '李四';
Object.assign(obj2, {age: 18, city: '上海'});
console.log(obj.country); // "广州"
console.log(obj2.country); // "广州"

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

区别在于自身属性和共有属性,我们在查看和删除的时候

即查找的时候会找到obj的原型里面去,但是如果修改或者增加name这个属性并不能使原型里面的属性发生改变

let obj = {
  name:'xiaoxiao',
  age:18
}
//我们知道obj有个自身属性,它还有一个隐藏的共有属性

'name' in obj //问name是属于obj的自身属性或共有属性吗?答案是true

obj.hasOwnProperty('name') //问name自身属性吗? 答案是true

一道必须明白的题目

let list = ['name', 'age', 'gender']
let person = {
   name:'frank', age:18, gender:'man'}
for(let i = 0; i < list.length; i++){
  let name = list[i]
  console.log(person__???__)
}

使得 person 的所有属性被打印出来

选项:

console.log(person.name)

console.log(person[name])

提示

选项1的name是一个字符串,选项2的name是一个变量

let name = 'frank' obj[name] 等价于 obj['frank'] 而不是obj['name'] 和 obj.name