《JS 对象基本用法》

172 阅读1分钟

声明对象的两种语法:

第一句是习惯用法,第二句才是正规写法

let obj = { 'name': '小明', 'age': 18 }
let obj = new Object({'name': '小明'})

注意:键名是字符串,不是标识符,可以包含任意字符 ;引号可省略,省略之后就只能写标识符 ;就算引号省略了,键名也还是字符串(重要)

如何删除对象的属性:

使用下面语句

delete obj.xxx 或 delete obj['xxx']

即可删除 obj 的 xxx 属性 

请区分「属性值为 undefined」和「不含属性名」 

不含属性名 :

'xxx' in obj === false 

含有属性名,但是值为 undefined:

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

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

如何查看对象的属性:

查看自身所有属性:

Object.keys(obj)

查看自身+共有属性

console.dir(obj)

或者自己依次用 Object.keys 打印出 obj.__proto__ 

判断一个属性是自身的还是共有的:

obj.hasOwnProperty('toString')

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

直接赋值 :

let obj = {name: '小明'} // name 是字符串

obj.name = '小明' // name 是字符串

obj['name'] = '小明' 
//obj[name] = '小明' // 错,因 name 值不确定

obj['na'+'me'] = '小明'

let key = 'name'; 
obj[key] = '小明';
//let key = 'name'; obj.key = '小明' // 错,因为 obj.key 等价于 obj['key']

 批量赋值 :

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

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

1. hasOwnProperty 方法用于判断对象“自身”是否有某个属性:

2. in 用于判断对象“自身”及其“继承对象”是否具有某个属性:

举个栗子:


应用: 

 可以判断一些新属性和方法是否支持,如下 :

 1. 想判断浏览器是否支持“__proto__"属性       // ‘__proto__’ in {} 

 2.判断浏览器是否支持“bind”方法        // "bind" in new Function()