对象介绍
- 对象是js中的一种复杂类型数据
object
- 对象就是无序的数据集合
- 对象中存储数据的方式
- 通过键值对存储:键名 --> 键值
- 键名和键值是一一对应关系
- 键名也叫对象的属性名,键值也叫对象的属性值
- 对象中的键值可以是任意数据类型
- 对象中的键名
- 对象的键名只能是字符串或者
symbol
数据类型,默认为字符串数据类型 - 对象的键名在对象集合中是唯一的(不重复)
- 创建对象的两种方式
- 内置构造函数创建
- 语法:
变量 = new Object()
new
关键字是专门用于创建对象的(实例对象)Object()
是内置构造函数
- js中常见的内置构造函数:
Object, Number, String, Boolean, Function, Array, Date, Error, RegExp
- 得到一个空对象
- 字面量创建
- 语法1:
变量 = {}
- 语法2:
变量 = { 键值对 }
- 在字面量对象中,键值对的键名和键值通过
:
连接
- 在字面量对象中,如果属性名没有特殊符号(和变量命名一样)则可以不使用引号包裹
- 在字面量对象中,如果属性名有特殊符号则必须使用引号包裹
- 在字面量对象中,如果属性名是变量的值则必须使用
[]
包裹
var o1 = new Object();
console.log(o1);
var o2 = {};
console.log(o2);
var varName = 'like';
var o3 = {
'age': 17,
username: 'zs',
'*afss': 17,
ff: function() {},
info: { a: 1 },
age: 18,
[varName]: 'ctrl',
['user' + 'Gender']: '男'
}
console.log(o3);
操作对象数据
- 操作xxx对象就是对xxx对象的“curd”(增删改查)
- c: create(新增)
- u: update(修改)
- r: read(读取)
- d: delete(删除)
- 操作对象数据
- 操作对象中的键值对数据
- 有两套操作对象数据的语法
- 点语法
- 数组关联法
- 点语法操作对象数据
- 新增语法:
对象.属性名 = 属性值
- 只有当对象中**没有该属性名(键名)**的时候才是新增
- 修改语法:
对象.属性名 = 属性值
- 只有当对象中**有该属性名(键名)**的时候才是修改
- 读取语法:
对象.属性名
- 删除语法:
delete 对象.属性名
var obj = { username: 'zs', age: 17 }
obj.gender = '男';
obj.age = 18;
var r = obj.username;
console.log(r);
console.log(obj.abc);
delete obj.age;
console.log(obj);
- 数组关联法操作对象数据
- 新增语法:
对象['属性名'] = 属性值
- 只有当对象中**没有该属性名(键名)**的时候才是新增
- 修改语法:
对象['属性名'] = 属性值
- 只有当对象中**有该属性名(键名)**的时候才是修改
- 读取语法:
对象['属性名']
- 删除语法:
delete 对象['属性名']
var obj = { username: 'zs', age: 17 }
obj['gender'] = '男';
obj['age'] = 18;
var r = obj['username'];
console.log(r);
console.log(obj['abc']);
delete obj['age'];
console.log(obj);
- 点语法和数组关联法操作对象数据的区别
- 如果对象的属性名包含特殊字符则只能使用数组关联法
- 如果对象的属性名存储在变量中,则此时只能使用数组关联法
var obj = {
age: 17,
'!qwert': 666,
'background-color': 'red'
}
console.log(obj.!qwert);
console.log(obj['!qwert']);
console.log(obj['background-color']);
var varName = 'age';
console.log(obj.varName);
console.log(obj[varName]);
遍历对象数据
- 遍历对象数据使用
for-in
语法
for (变量 in 对象) {
}
var obj = {
userName: 'zs',
userAge: 17,
gender: '男',
123: 'qwer'
}
for (var key in obj) {
console.log(key, '---', obj[key]);
}
对象扩展
- 对象中的数据并不是完全无序的
- 若属性名为数字,则会自动将数字提前按照大小排列
- 若属性名为普通字符,则会按照添加顺序排列
var obj = {
username: 'zs',
12: 'qwre',
userage: 17,
1: 'a',
'1a': 'ab',
gender: '男',
2: 'c'
}
obj.abc = '12345';
obj.b = '345609';
obj[4] = 888;
obj[0] = 999;
for (var key in obj) {
console.log(key);
}