一、什么是对象
1.对象有两种语法形式
(1) 字面量语法 定义:直接将对象赋值给一个变量存储。 var 对象 = { 键名:键值,键名:键值,键名:键值 }; 例如:
const obj = {
name:'张三',
age:18,
sex:'男',
}
console.log(obj);
(2) 内置构造函数 定义:内置构造函数就是系统已经内置好的函数,我们通过new来直接进行调用,输出的是一个空对象。 var 对象 = { 键名:键值, 键名:键值, 键名:键值 }; 例如:
const obj = new Object();
console.log(obj);
二、对象对于key键名的要求
键名可以为数字、@、#等各种特殊符号, 如果是数字、@、#这三个特殊字符可以不用转化为字符串 如果是其他字符串,那么在增删查改的时候,需要转化为字符串,才可以不报错。 例如:
const obj = {
name:'张三',
age:18,
sex:'男',
'@':111,
'#':222,
123:333,
}
console.log(obj);
console.log(obj['name']);
console.log(obj['sex']);
三、对象的操作(增删查改)
有两种语法形式:
1.点语法
2.中括号[ ]语法
1.点语法形式
const obj = {
name:'张三',
age:'18',
}
// 增
obj.sex = '男';
console.log(obj);
// 删
delete obj.sex;
console.log(obj);
//查
console.log(obj.name);
console.log(obj.sex);
// 改
obj.name = 'Jack';
console.log(obj);
2.中括号语法形式
const obj = {
name:'张三',
age:'18',
}
console.log(obj);
// 增
obj['sex'] = '女';
console.log(obj);
// 删
delete obj['sex'];
console.log(obj);
//查
console.log(obj['name']);
console.log(obj['sex']);
// 改
obj['name'] = 'Jack';
console.log(obj);
四、点语法和[]中括号语法的区别
-
点语法 . 后面的是键名,[]括号里面的也是键名,键名命名正常的时候,两者都可以使用;
-
对于特殊字符和数字,只能支持[]语法;
-
[]支持变量,点语法不支持变量;
-
[]语法可以解析变量,会使用变量中存储的数据,作为键名获取对应的数据。
- []语法中写入的是键名,要加定界符;
- []语法中写入的是变量,不要将定界符。
const obj = { name:'张三', age:18, sex:'男', 123:'111', '@':222, $:333, } console.log(obj); // 用点语法不可以直接输出数字 // console.log(obj.123); // 用点语法不可以直接输出特殊字符 console.log(obj.$); console.log(obj.@); // 数字和特殊字符用[]方括号语法形式 console.log(obj[123]); console.log(obj['@']); console.log(obj['$']); // 变量用方括号[]语法形式 let i = 'name'; console.log(obj.i); // 报错 console.log(obj[i]);五、循环遍历对象
1.遍历对象使用的是for...in
语法形式:for( var 变量 in 对象 ){ }
变量中存储的是变量的键名/键/属性,
必须使用对象[ ]语法形式 也就是对象[ 变量 ]调用键名所对应的键值。
const obj = { name:'张三', age:18, sex:'男', 123:'111', '@':222, $:333, } console.log(obj); for( let key in obj ){ console.log( key , obj[key] ); }运行结果:
* * *
**实际项目中,因为对象的形式一般都相对很复杂,所以不会循环遍历每一个对象,一般采用解构赋值的形式来操作对象。***
```
// 解构赋值对象中的值
const obj = {
name:'张三',
age:18,
sex:'男',
123:'111',
'@':222,
$:333,
};
let{ name , age , sex } = obj;
console.log( name , age , sex );
```
> 注意:一般解构赋值不可以结构数字和特殊字符,会报错
六、认识数组
定义:数组就是存放数据的集合。
数组里面可以存放基本数据类型和引用数据类型。
基本数据类型:string、Boolean、float、null、undefined;
引用数据类型:function、array、object;
语法形式:
const arr = [ 数据1 , 数据2 , 数据3 , 数据4 ,...];
七、创建数组
创建数组有两种方式:
1.字面量
2.内置构造函数
1.字面量
语法形式:
const arr = [ 数据1 , 数据2 , 数据3 , 数据4 ,...];
const arr = [ 100 , 200 , 300 , 2e3 , 100.123 , function(){} ,[ 1 , 2 , 3 , 4 , 5 ] , ... ];
console.log( arr );
2.内置构造函数
语法形式:
const arr = new Array( );
// 空数组
const arr1 = new Array();
console.log(arr1);
// 数组长度为10,是一个空数组
const arr1 = new Array(10);
console.log(arr2);
// 数组传入10和20的参数
const arr3 = new Array(10 , 20);
console.log(arr3);
// 创建多值的数组
const arr4 = new Array( 100 , 200 , 300 , 400 );
console.log(arr4);
八、数组的长度
语法形式:
数组.length;
const arr = [ 1,2,3,4,5,6,true,undefined,null,100.123];
console.log(arr.length);
console.log( arr[0] );
console.log( arr[1] );
console.log( arr[2] );
console.log( arr[3] );
console.log( arr[4] );
console.log( arr[5] );
console.log( arr[6] );
console.log( arr[7] );
console.log( arr[8] );
console.log( arr[9] );
console.log( arr[10] );
运行结果:
九、数组的索引下标
数组的索引下标用 index 表示,值用 item 表示(一般是这样)
值也可以用索引下标表示:数组[ index ]。
// for循环遍历数组
for (let i = 0; i <= arr.length - 1; i++) {
console.log(i, arr[i]);
}
console.log('');
// 通过forEach循环遍历数组
arr.forEach(function (item, index) {
console.log(index, item);
})
console.log('');
// 通过for...of来循环遍历数组
// for...if是用来获取数组的值
for (let value of arr) {
console.log(value);
}
console.log('');
// 通过for...in遍历循环数组中的索引下标
for (let index in arr) {
console.log(index);
}
十、基本数据类型和引用数据类型的存储方式
基本数据类型:Boolean、number、null、undefined、float
引用数据类型:function、object、array、
(1)存储的区别:
1.基本数据类型:存储在栈内存中,变量内部就是存储的是变量的值
2.引用数据类型:变量存储在栈内存中,变量内部存储的指向堆内存的地址(对象实际的值),
(2)赋值的区别:
1.基本数据类型:是值的传递
可以理解为,将我自身的值复制一份给到另一个变量,后续修改另一个变量时,与自身没有任何关系
2.引用数据类型:是地址的传递
可以理解为,将自身的地址赋值一份给到另一个变量,后续修改相互会有影响
(3)比较的区别:
1.基本数据类型
比较时, 是拿变量实际的值,去做对比
2.引用数据类型
比较时,是拿引用地址做对比,判断是不是执行一个地址
(4) 传参的区别:
1.基本数据类型
是值的传递,将自身的值复制一份传递给函数的形参
2.引用数据类型
是地址的传递,将自身的地址复制一份传递给函数的形参