## 数组
+ 有序数据集合 是一个复杂数据类型
+ 有序性
- 下标 索引
- 自动生成
- [0, 数组长度-1]
+ 创建一个数组
+ 添加数据
+ 获取数据
+ 遍历数组
+ 修改数据
+ 删除数据
+ 查找数组里面是否包含某一个数据
+ 数组去重
+ 数组反转
+ 数组拼接
+ 数组排序
## 数据类型
1. 基础的数据类型
- number string boolean undefined null
2. 复杂的数据类型(引用数据类型)
- array
## js的存储数据方式-值存储和引用存储
+ 在js中有两种存储数据的方式: 栈和堆
+ 在栈里面存储变量名
+ 如果数据是基础数据类型 直接存在栈里面
+ 如果数据是复杂数据类型 存在堆内存里面 每一次在堆内存存储一个数据都会得到一个空间地址
+ 基础数据类型它的值和变量都是存储在栈里面(值存储)
+ 复杂数据它的变量名是存在栈里面 在栈里面存的值是一个指向堆内存空间的地址(引用) 这个地址指向堆内存空间的数据(引用存储)
+ js在查找数据的时候只会在栈里面查找
## 值传递和引用传递
+ 把一个变量赋值给另一个变量 这个过程称为传递的过程
+ 基础数据类型之间的赋值是把值给另一个变量, 一个变化另一个不受影响 这个赋值过程称为`值传递`
+ 复杂数据类型之间的赋值是把地址给另一个变量, 一个变化另一个也会变化。因为他们的地址是指向同一个堆内存里面的数据 这个赋值过程称为`引用传递`
## 值比较和引用比较
+ 两个变量比较是否相等
+ 基础数据类型拿两个变量的值进行比较的
+ 复杂数据类型拿两个变量的地址进行比较的
## 字符串
+ 凡是被单引号或者双引号包裹的
+ 多个字符组成的整体
+ 'hello'
+ 字符串在底层存储方式和数组是一致(字符串和数组的共性)
1. 支持下标的方式访问
2. 字符串也是有长度
3. 字符串可以支持遍历
4. 支持查找
+ 字符串和数组的区别
1. 不支持下标方式修改
2. 字符串不支持用forEach去遍历
3. 不支持字符串的删除
4. 支持拼接,不建议使用
5. 不支持反转,不支持排序
+ 反转一个字符串
1. 把字符串拆分成一个数组
2. 把数组拼接成字符串
+ 字符串的只读性
+ 字符串和数组的相互转换
1. 把字符串转换成数组(拆分)
- var 数组 = 字符串.split()
2. 把数组转换成字符串(拼接)
- var 字符串 = 数组.join()
+ 字符串的方法
- 字符串.charAt(下标)
- 找到某一个小标位置的字符
- 字符串.charCodeAt(下标)
- 找到某一个下标位置的字符,再找到这个字符所对应的编码
+ 编码
- ASCII码表
- unicode码表(万国码)
- 字符串比较
- 字符串比较从左往右拿每一位字符相比
- 每一位字符串按照它对应的编码进行比较
- 中文编码在utf-8范围
+ u4e00-u9fa5
+ 字符串常用方法
- 转大小写
+ 转大写
- toUpperCase
+转小写
- toLowerCase
- 只能转英文
+ 字符串裁剪
- 字符串.substring(开始下标, 结束下标) 包含开始 不包含结束,(包头不包尾)
- 字符串.substr(开始下标,截取个数)
- 字符串.slice(开始下标, 结束下标) 包含开始 不包含结束,(包头不包尾)
+ substring和slice的区别
1. slice可以支持负数
+ 传负数代表下标是从右往左数的 从-1开始
+ 裁剪的方向永远都是从左往右
+ 必须有交集才能得到结果
2. slice既可以裁剪数组也可以裁剪字符串
### 拓展数组的方法
+ map方法
- 将一个数组里面数据经过计算 得到一个计算后的新数组
```js
// map函数调用之后也会有一个返回值 返回就是计算后的数组
var 新数组 = 数组.map(function(item, index){
// item代表数组的每一项
// index代表数组的索引
// map需要返回一个数据 会把这个数据放到新数组里面
})
```
+ filter方法
- 将一个数组根据某一个条件进行过滤 得到一个过滤后的新数组
```js
// filter方法调用之后有一个返回值 返回的是过滤后的数组
var 新数组 = 数组.filter(function(item, index){
// 这个函数需要有一个返回 返回的是一个条件 是一个布尔值
// 会根据这个布尔值来决定是保留还是撇弃当前项数据
})
```
+ every方法
- 判断数组里面是否每一项都符合这个条件
```js
var 布尔值 = 数组.every(function(item, index){
// 需要返回值 这个返回值就是条件
})
```
+ some方法
- 判断数组里面是否有符合这个条件的某一项
```js
var 布尔值 = 数组.some(function(item, index){
// 需要返回值 这个返回值就是条件
})
```