《JS 对象基本用法》

170 阅读2分钟

JS 对象基本用法

定义:

  • 无序的数据集合(可以包括多种类型的数据)
  • 键值对的集合

一、声明的两种语法

let obj = {'name':'xdd', 'age':18 }
let obj = new Object({'name':'xdd', 'age':18 })
  • 注意:键名是字符串,键名的引号就算省略了,也会自动转为字符串

二、删除属性

  1. delete()
    • 注意区分**属性值为undefined **和 不含属性名
let obj = {
    'name':'xdd', 
    'age':22,
    'gender':undefined
};
console.log('name' in obj);		//true 
delete obj.name;		
console.log('delete' in obj);		//false 

console.log(obj.haha);		//undefined,但是haha不为obj的属性,因此不能通过此方式来判断属性是否在对象中

console.log('gender' in obj && obj.xxx === undefined
);		//true,用此来判断地偶像里面有某个属性,并且值为undefine。

三、查看属性

1.查看单个属性

  • 中括号:obj['key']
  • 点语法:obj.key
  • 防踩坑:obj[key],注意,这里的key会默认为变量名,先求值。

防止踩坑

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

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

  1. console.log(person.name)
  2. console.log(person[name])

选择2

2.查看所有属性

let obj = {
    'name':'xdd',
    'age':18,
    'gender':undefined
};
Object.keys(obj);		//输出键名
Object.values(obj);		//输出键值
Object.entries(obj);	//输出键值对
console.dir(obj);		//查看自身+共有属性

//判断一个属性是否属于自身
console.dir(obj.hasOwnProperty('toString'));

四、增加或修改属性

1.单个

let obj = {name: 'frank'} ;// name 是字符串
obj.age = 18; // name 是字符串
obj.name = 'aaa'; //修改
obj['name'] = 'bbb'; //修改
obj['gender'] = 'female'; //添加

2.批量

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

3.注意

  1. 无法通过自身修改或增加共有属性
let obj = {}, obj2 = {} // 共有 toString
obj.toString = 'xxx' //只会改 obj 自身属性
obj2.toString //还是在原型上
  1. 我偏要修改或增加原型上的属性
obj.__proto__.toString = 'xxx' // 不推荐用 __proto__
Object.prototype.toString = 'xxx' 

一般来说,不要修改原型,会引起很多问题

  1. 修改隐藏属性(原型)

不推荐使用 __proto__

let obj = {name:'frank'}
let obj2 = {name: 'jack'}
let common = {kind: 'human'}
obj.__proto__ = common
obj2.__proto__ = common

推荐使用 Object.create

let obj = Object.create(common)
obj.name = 'frank'
let obj2 = Object.create(common)
obj2.name = 'jack'

要改就一开始就改,别后来再改

五、'name' in objobj.hasOwnProperty('name')

var obj = {
    'name':'xdd',
    'age':18,
    'gender':undefined
};
console.log('name' in obj); //true
console.log(obj.hasOwnProperty('name'));//true

console.log('toString' in obj);//true
console.log(obj.hasOwnProperty('toString'));//false

  • obj.hasOwnProperty('name') 用来判断某个对象自身是否拥有某个属性,有truefalse

  • 'name' in obj 在判断某个对象中是否有某个属性时,判断的范围除自身外,还会包含原型的共有属性。