声明: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都是对象
修改
- 单个修改自己的属性
//方式一
obj.name = 'LaoTie'
//方式二
obj['name'] = 'LaoBiao'
//方式三
let name = 'name'
obj[name] = 'LaoDi'
复制代码
批量 修改自己的属性
Object.assign(obj,{'age':18,......}
复制代码
- 修改自己的原型————删 将自己的原型修改为空,这样他就没有原型了。
obj.__proto__=null
console.dir(obj.__proto__) //很奇怪,到的值是undefined
//错误的例子,原型依旧存在
obj.__proto__=undefined
复制代码
- 修改自己的原型属性————改
- 改原型的属性 下面三个不推荐方式,只是 写法不同,效果相同;再往下,就不再重复了。
//带有`__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'
复制代码
- 将原型 替换成其它原型
//将 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吧?