今天对字符串回顾,然后做了一些练习,学习了ES5的严格模式和额外数组,还是直接展示今天的笔记吧
一、ES5严格模式
概念:
- 除了正常运行模式外,ECMAScript5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式是JavaScript在更严格的条件下运行
作用:
- 消除了JS语法的一些不合理、不严谨之处,减少—些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的JS做好铺垫
- 注意:同样的代码,在"严格模式"中,可能会有不一样的运行结果,一些在"正常模式"下可以正常运行的语句,在"严格模式"下将不能运行。
strict model 严格模式:
- 全局模式 在当前作用域的最顶部设置字符串的 ‘use strict’ 在它下面的代码就进入严格模式
- 布局模式 在函数内部设置字符串的 ‘use strict’ 在它下面的代码就进入严格模式
使用:
- 要求声明变量必须使用var关键字
- 通过函数名()形式调用函数,this无法指向window
- 函数的形参不能有重复的
- arguments对象不允许被动态的修改
- arguments.callee() 和 函数名称()是一样的
ES5新增数组:
forEach() 循环 对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值
//map可以改变当前循环的值,返回一个新的被改变过值之后的数组(map需return),一般用来处理需要修改某一个数组的值。映射
//map会把数据返回给外界,把它存储在数组里面
map(callback) :会遍历当前数组,然后调用参数中的方法,返回当前方法的返回值。
filter() 遍历和过滤。返回符合条件的元素的数组。filter需要在循环的时候判断一下是true还是false,是true才会返回这个元素。
//注意:它只会返回第一次出现的数组元素的位置
indexOf() 查找数组里面的元素,如果有就返回对应的位置(下标)
//根据注意所示,也可以做到数组去重的效果
var arr = ['a', 'a', 'a', 'b', 'c', 'b', 'c', 'd', 'a'];
var res = arr.filter(function(item, index, arr){
console.log(item, index);
// arr.indexOf('a') == 0
// 0
return arr.indexOf(item) == index;
})
console.log(res);
二、Math对象
- Math对象是JS内置对象,JS内置好的对象直接使用,不需要关注怎么实现的
- Math.PI :圆周率
- Math.abs():绝对值
- Math.ceil():向上取整(整数加1,小数去掉)
- Math.floor():向下取整(直接去掉小数)
- Math.round():四舍五入
- Math.pow():x的y次方
- Math.sqrt():平方根
- Math.random():返回一个0到1之间的随机小数
随机数公式:Math.random * (max-min) + min
例子:
//求直角三角形斜边长 c*c = a*a + b*b
function getLong(a, b){
//var c = a*a + b*b;
var c = Math.pow(a, 2) + Math.pow(b, 2);
//开平方
c = Math.sqrt(c);
return c;
}
var res = getLong(3, 4);
console.log(res);
//网页背景变色 十六进制的颜色值
var max = 999999;
var min = 100000;
var random = Math.floor(Math.random()*(max-min)+min);
document.body.bgColor = '#'+random;
定时器:
- 参数1是一个函数 参数2是时间
- 回调函数:把函数本身当成参数给另一个函数使用,把这种情况叫做回调函数
- 定时器可以让程序随着时间而改变,动态的做某些事情
语法:
setInterval(函数or代码,时间间隔)
//例子:网页背景换色
var max = 999999;
var min = 100000;
setInterval(function(){
var random = Math.floor(Math.random()*(max-min)+min);
console.log(random);
document.body.bgColor = '#'+random;
}, 1000)
定时器累加问题:
- 当多次点击按钮时,相当于是开启了多次定时器,点击关闭按钮时其实只是关闭了当前开启的定时器, 之前开起的定时器是没有关闭的,所以导致了定时器累加问题
- 解决方案:先清除再开启 clearInterval();