// object对象数据类型
普通对象
-由大括号包裹起来的
-由0到多组属性名和属性值(键值对)组成
属性是用来描述当前属性特征的,属性名是当前具备这个特征,属性值是对这个特征的描述(专业语法,属性名称未键【key】,属性值称为值【value】,一组属性名和属性值称为一组键值对)
···
var obj = {
name: '哈哈哈',
age: 9
};
// =》对象的操作:对键值对的增删改查
[获取]
语法:对象.属性 / 对象[属性]
obj.name //哈哈哈
obj['name'] //哈哈哈 一般来说,对象的属性名都是字符串格式的(属性值不固定,任何格式都可以)
[增/改]
在js对象中,属性名是不允许重复的,是唯一的
obj.name = 'skl'; //=》原有对象中存在name属性,此处属于修改属性
obj.sex = '男'; //=》原有对象不存在SEX,此处相当于给当前对象新增一个属性SEX
obj.['age'] = 12; //=》
[删]
- 彻底删除(对象中不存在这个属性了)
delete obj.age;
delete obj['age']
console.log(obj.age) //undefined
- 假删除:并没有移除这个属性,只是让当前属性的值为空
obj.sex = null;
obj['sex'] = null;
console.log(obj.sex) //null
在获取属性值的时候,如果当前对象有这个属性名,则可以正常获取到值(哪怕是null),但是如果没有这个属性名,结果是undefined;
// 一个对象中的属性名不仅仅是字符串格式的,还有可能是数字格式的
var obj = {
name: '哈哈',
0: 100
}
obj[0] => 100
obj['0'] => 100
obj.0 =>Uncaught SyntaxError: Unexpected number
obj[true] = 200;
console.log(obj[true]) // 200
obj[null] = 300
console.log(obj[null]) // 300
obj[undefined] = 400
console.log(obj[undefined]) // 400
obj[{}] = 500
console.log(obj[{}]) // 500
当我们存储的属性名不是字符串也不是数字的时候,浏览器会把这个值转换围殴字符串(toSting),然后再进行存储
obj[{}] = 300;
先把{}.toSting()后的结果作为对象的属性名为存储进来 obj['[object object]'] = 300
obj[{}] =>获取的时候也是先把对象转换为字符串'[object object]',然后获取之前存储的300
面试题:
var one = new Object();
var two = new Object();
var map = new Object();
map[one] = "one"; one = new Object ==》 map[new object] = map['[object object]'] = 'one'
map[two] = "two"; two = new Object ==》 map[new object] = map['[object object]'] = 'two'
alert(map[one]); // two
数组对象(对象由键值对组成的)
obj oo = {
a: 12
};
var arr = [0:12,1:23] //12和23 都是属性值,属性名呢?
数组也是对象
数组也是对象通过观察结果,发现数组对象的属性名是数字(我们把数字属性名称称为当前对象的索引)
arr[0]
arr['0']
arr.length
arr['length']
arr.0 //语法错误
思考题:
var obj = {
name: '哈哈',
age: 9,
'haha': 11
}
var name = 'haha'
obj.name // 哈哈
obj['name'] // 哈哈
obj[name] == obj['haha'] // 11
```
'name' 和 name的区别
'name'是一个字符串的值,它代表的是本身
name 是一个变量,不是值,他代表的是本身存储的这个值('haha')
```
网友评论