Day17
1、 ES5的新增
ES5:ECMAScript5
- 严格模式
严格模式:更严格的开发者模式
意义:
消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为
消除代码运行的一些不安全之处,保证代码运行的安全
提高编译器效率,增加运行速度
为未来新版本的JavaScript做好铺垫
开启方式:
在作用域开始的位置,加上一行字符串”use strict”
局部严格:
安全,但是麻烦
全局严格
不安全
配合匿名函数
利用父子作用域,本质是局部,但实现了全局的方便
严格模式开启之后的变更
声明变量必须加关键字(var)
不允许参数名重复
没有明确隶属对象的函数中的this(执行了)指向undefined
arguments的内容不会被形参的改变而影响
arguments.callee被禁止使用
2、 新增的数组方法
- indexOf();
功能:返回指定数据所在的索引,没有返回-1;
参数:1要查找的数据,2起始位置,可选
返回值:索引 或者 -1;
是否修改原数据: 否 - forEach(function(val,idx,self){});
功能:遍历数组;
参数:函数,这个函数自带三个形参,1数据,2索引,3数组自身;
返回值:undefined;
是否修改原数据:否; - map(function(val,idx,self){
return val *= 1.3;
});
功能:1遍历数组;2修改数据
参数:函数,这个函数自带三个形参,1数据,2索引,3数组自身;
返回值:数组,数据为:每次遍历到数组时的返回值;
是否修改原数据:否; - filter(function(val,idx,self){
return typeof val === “number” ; - });
功能:1遍历数组;2过滤数据;
参数:函数,这个函数自带三个形参;1数据,2索引,3数组自身;
返回值:数组,数据是每次遍历数组返回值为true是的值;
是否修改原数据:否; - some(function(val,idx,self){
return val ===4 ; - });
功能:1遍历数组,2检测所有数据(只要有一个返回true,就是true,同时停止遍历);
参数:函数,这个函数自带三个形参;1数据,2索引,3数组自身;
返回值:布尔值,遍历数组中的数据时,只要有一个返回true,就是true,同时停止遍历
是否改变原数据:否 - every(function(val,idx,self){
return true;
});
功能:1遍历数组,2检测所有数据(必须所有都为true,才是true);
参数:函数,这个函数自带三个形参;1数据,2索引,3数组自身;
返回值:布尔值,遍历数组中数据时,必须所有返回true,才是true,只要有一个false,就是false,并且停止遍历
是否修改原数据:否 - reduce(
function(prev,val,idx,self){
return 指定数据;
} - );
功能:1遍历数组,2归并
参数:
函数:该函数自带四个形参,1上一个值,2数据,3索引,4数组自身
指定默认情况下的上一个值,如果没有指定,上一个值,默认为数组的第一个数据
返回值:最后一个遍历的返回值;
是否修改元数据:否
-reduceRight();
等同于reduce方法,只是反向归并,从右向左遍历数据。
3、 如何调bug
1.程序有报错,结果没出来
1.观察报错
2.根据报错找到指定行号
3.观察哪错了
3.1不一定是报错行号的代码有问题,有可能是之前的问题,在此行暴露
3.1.1向上查找来源
3.1.2定位真正的问题所在
3.2找来源
4.修改正确
2.程序有报错,但结果出来了,可是不对
1.观察报错
2.根据报错找到指定行号
3.观察哪错了
4.找到最终结果
5.向前反推
6.观察数据的来源
7.根据数据的来源,计算规则
8.观察程序的执行过程和代码是否正确
9.修改正确
3.程序无报错,但结果出来了,可是不对
1.找到最终结果
2.向前反推
3.观察数据的来源
4.根据数据的来源,计算规则
5.观察程序的执行过程和代码是否正确
6.修改正确
4.程序无报错,结果没出来
1.重新写:
1.1至少可以将思路捋一遍
1.2再重新写
2.反推:要求对当前程序的了解程度非常高
...
观察工具:
判断当前位置的代码是否执行:console.log(1);
一定要在报错行号上面打印,因为报错会阻塞程序执行
判断当前变量或数据是否正常:console.log(变量或数据);
一定要在报错行号上面打印,因为报错会阻塞程序执行
逐行执行代码(debugger);
打断点,让代码逐行执行;
关键字:debugger;
利用浏览器的控制台
错误信息手册:
收集自己遇到的报错信息:
错误提示:a is not defined;
错误原因:a未定义
解决方式:定义或者不使用a