POSTS
JS 对象基本用法
对象
JS 有7种数据类型: number, string, bool, symbol, null, undefined, object
而对象 object 的定义为: 1. 无序的数据集合 2. 键值对的集合
- key 对应对象的属性名 property
- value 对应对象的属性值
内容1:声明对象的两种语法
1.
let obj1 = {'name': 'Billy', 'age': 18}
2.
let obj2 = new Object({name: 'Billy', age: 18})
- 键名是字符串,不是标识符,可包含任意字符
- 引号可以省略,省略之后就只能写标识符
- 就算引号省略了,键名也还是字符串
内容2:如何删除对象的属性
let obj = {'name': 'Billy', 'age': 18}
delete obj.name
delete obj['age']
// 不含属性名
’sex‘ in obj === false
// 含有属性名,但是值为 undefined
’xxx' in obj && obj.xxx === undefined
// 这种情况不能断定'xxx'是否为 obj 的属性,可能不含该属性名,或者含但其值为 undefined
内容3:如何查看对象的属性
// 查看自身所有属性
Object.keys(obj)
// 查看自身所有属性+共有属性(原型)
console.dir(obj)
// 判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
// false
原型:
- 原型里存着对象的共有属性
比如obj
的原型就是一个对象,obj.__proto__
存着这个对象的地址;
可见,对象的原型也是对象,所以对象的原型也有原型;
obj={}
的原型,即为所有对象的原型;
这个原型包含所有对象的共有属性,是对象的根;
这个原型的原型,是null。
另外: 查看属性有2种方法,为中括号语法和点语法 - 不加[]的属性名会自动变成字符串 - 加了[]会当成变量求值 - 值如果不是字符串,会自动变成字符串
内容4:如何修改或增加对象的属性
直接赋值
obj.age = 19
批量赋值
Object.assign(obj, {age: 20, gender: 'man'})
obj.toString = 'xxx'
只会在改obj的自身属性,obj2.toString
还是在原型上;
一般不推荐修改原型;
修改隐藏属性,不推荐使用__proto__
;
推荐使用Object.create()
let obj = Object.create(common)
>Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的proto。
内容5:’name’ in obj和obj.hasOwnProperty(‘name’) 的区别
in
:无论’name’在对象属性名或者原型里,都为true
hasOwnProperty
:属性名在自身上为true,在原型里而非自身为false