数组塌陷
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
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
// arr.pop()
// arr.shift()
arr.splice(i, 1)
}
for (var i = 0
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
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)
数学的方法
在 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
* 作用: 返回 π
实践
1. random
var num = Math.random()
console.log(num)
2. round
var num1 = Math.round(4.499999)
var num2 = Math.round(4.5)
console.log(num1)
console.log(num2)
3. ceil
var num1 = Math.ceil(1.000001)
var num2 = Math.ceil(1.999999)
console.log(num1)
console.log(num2)
4. floor
var num1 = Math.floor(1.000001)
var num2 = Math.floor(1.999999)
console.log(num1)
console.log(num2)
5. abs
var num1 = Math.abs(1.23)
var num2 = Math.abs(-1.23)
console.log(num1)
console.log(num2)
6. sqrt
var num = Math.sqrt(36)
console.log(num)
7. pow
var num = Math.pow(3, 3)
console.log(num)
8. max
var num = Math.max(100, 5, 7, 99, 102, 96, 999)
console.log(num)
9. min
var num = Math.min(100, 5, 7, 99, 102, 96, 1)
console.log(num)
10. PI
console.log(Math.PI)
JS 的严格模式
'use strict'
JS 是一个相对不是很严谨的语言, 在开发的时候一些代码也不是很严格
换句话说严格模式就是对开发的时候, 你写的代码做了一些要求
严格模式的规则
1. 声明变量必须要 var 关键字
2. 函数的形参不可以重复
(触犯规则就会报错)
JS 中默认是没有开启严格模式, 如果想要开启严格模式, 需要手动在代码最开始的位置(script标签内第一行), 写一个字符串 'use strict'
现在的公司的项目中, 基本都是按照严格模式开发的