1数组塌陷
// var arr = [0, 1, 2, 3, 4, 5]
// // 0 1 2 3 4 5
// console.log('原始数组: ', arr)
// 利用数组的方法, 将数组的每一项 删除 pop shift splice
// 1. 拿到数组的每一项, 暂时先不用数组的方法, 使用 for循环
// for (var i = 0; i < arr.length; i++) {
// arr.pop()
// /**
// * 第 1 轮
// * i === 0 arr.length === 6 条件成立, 开始执行内部代码
// * arr.pop() 将数组的最后一项删除, 删除完毕 数组.length === 5
// *
// * 第 2 轮
// * i === 1 arr.length === 5 条件成成立, 开始执行内部代码
// * arr.pop() 将数组的最后一项删除, 删除完毕 数组.length === 4
// *
// * 第 3 轮
// * i === 2 arr.length === 4 条件成立, 开始执行内部代码
// * arr.pop() 将数组的最后一项删除, 删除完毕 数组.length === 3
// *
// * 第 4 轮
// * i === 3 arr.length === 3 条件不成立, 循环到此结束
// */
// }
// var arr = [0, 1, 2, 3, 4, 5]
// // 0 1 2 3 4 5
// console.log('原始数组: ', arr)
// for (var i = arr.length - 1; i >= 0; i--) {
// // arr.pop()
// // arr.shift()
// arr.splice(i, 1)
// }
// for (var i = 0; i < arr.length; i++) {
// arr.splice(i, 1)
// /**
// * 第 1 轮
// * i === 0 arr.length === 6 符合条件
// * arr.splice(i, 1) (0, 1) 把 [0] 的值截取掉了
// * 现在的数组: arr === [1, 2, 3, 4, 5]
// * 对应的下标 0 1 2 3 4
// * 数组的length === 5
// *
// * 第 2 轮
// * i === 1 arr.length === 5 符合条件
// * arr.splice(i, 1) (1, 1) 把 [1] 的值截取掉了
// * 现在的数组: arr === [1, 3, 4, 5]
// * 对应的下标 0 1 2 3
// * 数组的length === 4
// *
// * 第 3 轮
// * i === 2 arr.length === 4 符合条件
// * arr.splice(i, 1) (2, 1) 把 [2] 的值截取掉了
// * 现在的数组: arr === [1, 3, 5]
// * 对应的下标 0 1 2
// * 数组的length === 3
// *
// * 第 4 轮
// * i === 3 arr.length === 3 条件不成立, 循环到此结束
// */
// }
var arr = [0, 1, 2, 3, 4, 5]
// 0 1 2 3 4 5
console.log('原始数组: ', arr)
for (var i = 0; i < arr.length; i++) {
arr.splice(i, 1)
// i--
// /**
// * 第 1 轮
// * i === 0 length === 6 符合条件
// * 执行内部代码
// * + arr.splice(i, 1) 此时相当于 把 [0] 的值截取掉了
// * + i-- 此时相当于把 i 的值更改为 -1
// * 循环内部代码执行完毕之后, 会执行一个 i++, 所以下一轮循环开始的时候 i 的值 === 0
// *
// * 第 2 轮
// * i === 0 length === 5 符合条件
// * 执行内部代码
// * + arr.splice(i, 1) 此时相当于 把 [0] 的值截取掉了
// * + i-- 此时相当于把 i 的值更改为 -1
// * 循环内部代码执行完毕之后, 会执行一个 i++, 所以下一轮循环开始的时候 i 的值 === 0
// *
// * 第 3 轮
// * i === 0 length === 4 符合条件
// * 执行内部代码
// * + arr.splice(i, 1) 此时相当于 把 [0] 的值截取掉了
// * + i-- 此时相当于把 i 的值更改为 -1
// * 循环内部代码执行完毕之后, 会执行一个 i++, 所以下一轮循环开始的时候 i 的值 === 0
// *
// * 第 4 轮
// * i === 0 length === 3 符合条件
// * 执行内部代码
// * + arr.splice(i, 1) 此时相当于 把 [0] 的值截取掉了
// * + i-- 此时相当于把 i 的值更改为 -1
// * 循环内部代码执行完毕之后, 会执行一个 i++, 所以下一轮循环开始的时候 i 的值 === 0
// *
// * 第 5 轮
// * i === 0 length === 2 符合条件
// * 执行内部代码
// * + arr.splice(i, 1) 此时相当于 把 [0] 的值截取掉了
// * + i-- 此时相当于把 i 的值更改为 -1
// * 循环内部代码执行完毕之后, 会执行一个 i++, 所以下一轮循环开始的时候 i 的值 === 0
// *
// * 第 6 轮
// * i === 0 length === 1 符合条件
// * 执行内部代码
// * + arr.splice(i, 1) 此时相当于 把 [0] 的值截取掉了
// * + i-- 此时相当于把 i 的值更改为 -1
// * 循环内部代码执行完毕之后, 会执行一个 i++, 所以下一轮循环开始的时候 i 的值 === 0
// *
// * 第 7 轮
// * i === 0 length === 0 不符合条件, 循环到此结束
// */
}
console.log('删除后的数组: ', arr)
2.数学的方法
* 数学的方法
*
* 在 JS 中 Math 对象给我们提供了操作数据的一些方法(数学的方法)
*
* 1. random
* * 语法: Math.random()
* * 作用: 得到一个随机数, 每次生成的数字都不一样, 但一定是0~1之间的, 包含0, 不包含1, 也就是说最大值可能是 0.99999....
*
* 2. round
* * 语法: Math.round(数字)
* * 作用: 将这个数字(小数), 按照四舍五入的形式变成整数
*
* 3. ceil
* * 语法: Math.ceil(数字)
* * 作用: 将这个数字(小数) 向上取整
*
* 4. floor
* * 语法: Math.floor(数字)
* * 作用: 将这个数字(小数) 向下取整
*
* 5. abs
* * 语法: Math.abs(数字)
* * 作用: 返回这个数字的绝对值
*
* 6. sqrt
* * 语法: Math.sqrt(数字)
* * 作用: 求 平方根
*
* 7. pow
* * 语法: Math.pow(基数, 幂)
* * 作用: 返回基数的几次幂
*
* 8. max
* * 语法: Math.max(数字1, 数字2, 数字3...)
* * 作用: 返回传入的数字中 最大的哪一个
*
* 9. min
* * 语法: Math.min(数字1, 数字2, 数字3...)
* * 作用: 返回传入的数字中 最小的哪一个
*
* 10. PI
* * 语法: Math.PI
* * 作用: 返回 π
3.js的严格模式
* JS 的严格模式
*
* JS 是一个相对不是很严谨的语言, 在开发的时候一些代码也不是很严格
*
* 换句话说严格模式就是对开发的时候, 你写的代码做了一些要求
*
* 严格模式的规则
* 1. 声明变量必须要 var 关键字
* 2. 函数的形参不可以重复
*
* JS 中默认是没有开启严格模式, 如果想要开启严格模式, 需要手动在代码最开始的位置(script标签内第一行), 写一个字符串 'use strict'
*
* 现在的公司的项目中, 基本都是按照严格模式开发的
4.字符集
* 字符集
*
* 计算机只能存储二进制数据 0101010
*
* 我们的 大写字母 小写字母 符号之类的内容 都是由 二进制数字组成
*
* 或者说我们在敲一个字符的时候, 都有一个对应的编号, 计算机存储的时候存储的是这些编号,
* 只不过我们看到的时候, 是通过这些编号解析成我们看到的内容
*
*
* 前身: ASCII as key (128) 只够 美国人用英语的使用
*
* 国内 推出了一个属于中国的 GBK 国标码 前128位 ASCII码, 后边从129位开始就是汉字
*
* unicode (万国码) 前 128 位还是 ASCII码, 后边开始是各个国家的文字码
*
* 八位十六进制编码 容量小, 但是占用内存也小 UTF-8
* 十六位的十六进制编码 容量大, 但是占用内存也大