JS对象基本用法

一、声明对象的两种方法(对象:无序的数据集合&键值对的集合)

·简易声明:let obj = { 'name' : '李雷' , 'age': '12' }    

·正规声明:let obj = new Object ( { 'name' : '韩梅梅' } )

·注意细节:

1.键名是字符串,不是标识符,可包含任意字符;

2.引号可省略,省略之后就只能写标识符;

3.即使引号省略,键名也还是字符串(重要)。

二、如何删除对象的属性

删除方法:delete obj.xxx 或 delete obj['xxx']

注意细节:

1.不含属性名

'xxx' in obj === false

2.含有属性名,但是值为undefined

'xxx' in obj && obj.xxx===undefined

3.注意 obj.xxx === undefined 不能断定 'xxx'是否为obj的属性

三、如何查看对象的属性

·查看对象自身所有属性 : Object.keys(obj)

·查看自身+共有属性:console.dir(obj) 或依次用Object.keys打印出 obj.__proto__

·判断一个属性是自身的还是共有的:obj.hasOwnProperty('toString')

·中括号语法: obj['key']

·点语法:obj.key

优先使用中括号语法

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

·直接赋值: let obj = { name: ‘李雷’ }       obj.name = '李雷'    obj['name'] = '李雷'

·批量赋值:Object.assign(obj,{age: 18,gender:male})

·无法通过自身修改或增加共有属性,只会改自身属性,不影响原型的属性。

·obj.__proto__.toString='xxx' //不推荐用__proto__

·Object.prototypee.toString='xxx' 通常不要修改原型,会引起很多问题。

·推荐使用Object.create 修改隐藏属性

let common = {kind:'human'}

let obj = Object.create(common)

obj.name='李雷'

let obj2 = Object.create(common)

obj2.name='韩梅梅'

规范大概的意思是,要改就一开始就改,别后来再改

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

1.在某个对象是否拥有某个属性,判断的方法有很多,常用的方法就是object.hasOwnProperty('×××'),这个方法是不包括对象原型链上的方法的,举个例子:

let obj = {name:'lei'}

console.log(obj.hasOwnProperty('name'))   //true

console.log(obj.hasOwnProperty('toString'))  //false

在这个例子中,obj对象存在的name属性的时候,调用这个方法才是返回true,我们知道其实每个对象实例的原型链上存在toString方法,在这里打印false,说明这个方法只是表明实例对象的属性,不包括原型链上的属性。

2.下面我们再来看看in的使用,例子如下:

let obj2 = { name:'mei'}

console.log('toString' in obj2)   //true

我们可以看到,其实在这个例子中,我只是给了对象一个属性name,并没有其他的属性,然后我执行'tiString' in obj,可以看出控制动态打印出来的是true,原因就是对象的原型链上存在toString方法,所以in操作不管是不是原型链上,只要存在这个属性,返回的就是true。

你可能感兴趣的:(JS对象基本用法)