JS 对象基本用法

声明:obj、obj0、obj1……objN都是对象

内容1:声明对象的两种语法

let obj={'keys':'string','values':'随意类型'}
let obj0=new Object({'keys':'string','values':'随意类型'})
复制代码

内容2:如何删除对象的属性

//推荐的 删除方法
delete obj.xxx	
delete obj.['xxx']
//重复的 删除同一属性 JS依旧返回true
//也可以理解为 删除本身就不存在的属性,JS也说成功了!可能是因为没有这个属性就 等于 删除了:P

obj.xxx=undefined//只是修改xxx的值为 undefined,xxx还在对象内。
复制代码

内容3:如何查看对象的属性

Object.keys(obj)	//看键	
Object.values(obj)	//看值
Object.entries(obj)	//看键:值 对

console.log(obj)	//看 自身属性
console.dir(obj)	//看 自身属性 和 原型
复制代码

内容4:如何修改或增加对象的属性

如果 属性本身就在 对象内,就修改;如果 对象本身就没有这个属性,那么就增加。
声明:obj、obj0、obj1……objN都是对象

修改

  1. 单个修改自己的属性
//方式一
obj.name = 'LaoTie'

//方式二
obj['name'] = 'LaoBiao'

//方式三
let name = 'name'
obj[name] = 'LaoDi'
复制代码

批量 修改自己的属性

Object.assign(obj,{'age':18,......}
复制代码
  1. 修改自己的原型————删 将自己的原型修改为空,这样他就没有原型了。
obj.__proto__=null 
console.dir(obj.__proto__)	//很奇怪,到的值是undefined

//错误的例子,原型依旧存在
obj.__proto__=undefined
复制代码
  1. 修改自己的原型属性————改
    • 改原型的属性 下面三个不推荐方式,只是 写法不同,效果相同;再往下,就不再重复了。
//带有`__proto__`的写法是不推荐的,注意下面的代码
//方式 一
obj.__proto__.toString = 'xxx'

//方式 二
obj.__proto__['toString']='xxx'

//方式 三
let toStr = 'xxx'
obj.__proto__[toStr]='xxx'

//下面的无法修改原型的属性
obj.toString = 'xxx'	//只有为obj对象 新增了一个toString属性
复制代码

带有__proto__的写法是不推荐的,所以有了现在的写法

Object.prototype['toString']='xxx'
复制代码
  1. 将原型 替换成其它原型
//将 obj0 的原型,替换成 obj1,如果obj1有原型,obj0也可以使用,这就是原型链的体现!
let obj0 = Object.create(obj1)

//不推荐的写法
obj0.__proto__=obj1
复制代码

增和改一样,如果原来存在,就是改;如果原来没有,就是增。

内容5:'name' in obj和obj.hasOwnProperty('name') 的区别

原型链上的,用 in显示 true、用hasOwnProperty显示false

let obj0 ={name:1,age:'seven'}
let obj = Object.create(obj0)

'name' in obj
	>true
>obj.hasOwnProperty('name')
	>false
复制代码

这里有一个 细节,就是

name in obj
	>true
    
let name = ' '
name in obj
	>false
复制代码

NB吧?

分类:
前端
标签: