什么是JavaScript的对象?
有人说:“JavaScript中的所有内容都是对象”(并不是这样,应该说所有内容都可以充当对象),那到底什么是对象呢
let xiaoming = {
name : '小明',
age : 21,
height : 177
};
上述对象申明了一个 name
属性,值是 '小明'
, age
属性,值是 22
,以及其他一些属性。最后,把这个对象赋值给变量 xiaoming
后,就可以通过变量 xiaoming
来获取小明的属性了:
xiaoming.name; //小明
xiaoming.age; //21
声明对象
//以下是规范写法
let obj = new Object({'属性名':'属性值','属性名':'属性值'}) //逗号隔开
//以下是简写写法
let obj2 = {'属性名':'属性值','属性名':'属性值'}
- 属性名在遵守标识符命名规则的情况下可以不加引号:
//如果属性名是数值,可以不加引号,但它会自动转换为字符串
let obj = {
1: 'a',
3.2: 'b',
1e2: true,
1e-2: true,
.234: true,
0xFF: true
};
//但属性名最终都会变成字符串!!
// obj {
// Object.keys(obj)
// => ["1", "100", "255", "3.2", "0.01", "0.234"]
- 属性名在不遵守标识符命名规则的情况下会报错:
//如果不符合标识符命名规范,就需要为属性名加上引号
let obj = {
'1+2':3,
'1a':'1a'
}
- 变量可以作为属性名:
let p1 = 'name'
let obj = {
[p1]:'xiaoming',
}
可见 p1
是一个字符串类型的变量,值为 'name'
。
我们定义对象时,属性名被中括号包裹起来了,这是当属性名为变量时的一个写法。属性名是变量的值( name
)
删除对象的属性
//我们先声明一个对象
let obj = {
name : 'xiaoming',
age : 21
}
delete obj.name //删除name属性,方法一
delete obj['name'] //删除name属性,方法二
查看对象的属性
先创建一个对象:
let obj = {
name: "xiaoming",
age: 21
};
- 查看自身属性
Object.keys(obj);
- 查看自身属性+共有属性
console.dir(obj);
- 判读一个属性是自身属性还是共有属性
obj.hasOwnProperty('toString')
如何修改或增加对象的属性
//定义之后增加对象的属性
let obj = {
name: "xiaoming"
};
obj.age = 21;
//定义之后修改对象属性的属性值
obj.name = "xiao";
obj.age = "20";
//或者批量一起修改 可以用Object提供的assign属性
Object.assign(obj, { name: "xiaoming", age: 21 });
'name' in obj 和 obj.hasOwnProperty('name') 的区别
'name' in obj
是查看 name
这个属性名是否在对象中,出现 false
时,则表示不含有属性名。当查看 'toString' in obj
( toString
为隐藏属性)时也返回 true
,所以隐藏属性也能用它查看
使用 obj.hasOwnproperty('name')
查看 obj
这个对象是否存在 name
属性的时,返回 true
,当我们用它来查看 toString
时,打印 false
,说明这个方法只能查看实例对象的属性,不能查看原型链上的属性。
所以可以综合以上两种方法,来判断某一属性是共有属性还是自身的属性。
本文参考摘录了: