ES5新增 - 严格模式、数组方法

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是20道关于ES5和ES6的前端数组选择题及其答案: 1. 在ES5中,如何创建一个空数组? A. var arr = []; B. var arr = new Array(); C. var arr = {}; 答案:A 2. 在ES6中,如何创建一个空数组? A. var arr = []; B. var arr = new Array(); C. var arr = {}; 答案:A 3. 在ES5中,如何向数组末尾添加一个元素? A. arr.push(elem); B. arr.unshift(elem); C. arr.splice(elem); 答案:A 4. 在ES6中,如何向数组末尾添加一个元素? A. arr.push(elem); B. arr.unshift(elem); C. arr.splice(elem); 答案:A 5. 在ES5中,如何从数组末尾删除一个元素? A. arr.pop(); B. arr.shift(); C. arr.splice(-1, 1); 答案:A 6. 在ES6中,如何从数组末尾删除一个元素? A. arr.pop(); B. arr.shift(); C. arr.splice(-1, 1); 答案:A 7. 在ES5中,如何在数组指定位置插入一个元素? A. arr.splice(index, 0, elem); B. arr.push(elem); C. arr.unshift(elem); 答案:A 8. 在ES6中,如何在数组指定位置插入一个元素? A. arr.splice(index, 0, elem); B. arr.push(elem); C. arr.unshift(elem); 答案:A 9. 在ES5中,如何获取数组的长度? A. arr.length; B. arr.size; C. arr.count; 答案:A 10. 在ES6中,如何获取数组的长度? A. arr.length; B. arr.size; C. arr.count; 答案:A 11. 在ES5中,如何遍历数组并输出每个元素? A. for (var i = 0; i < arr.length; i++) { console.log(arr[i]); } B. arr.forEach(function(elem) { console.log(elem); }); C. for (var elem in arr) { console.log(elem); } 答案:A 12. 在ES6中,如何遍历数组并输出每个元素? A. for (var i = 0; i < arr.length; i++) { console.log(arr[i]); } B. arr.forEach(function(elem) { console.log(elem); }); C. for (var elem in arr) { console.log(elem); } 答案:B 13. 在ES5中,如何判断一个元素是否在数组中? A. arr.indexOf(elem) !== -1; B. arr.includes(elem); C. arr.contains(elem); 答案:A 14. 在ES6中,如何判断一个元素是否在数组中? A. arr.indexOf(elem) !== -1; B. arr.includes(elem); C. arr.contains(elem); 答案:B 15. 在ES5中,如何将数组转换为字符串? A. arr.join(); B. arr.toString(); C. JSON.stringify(arr); 答案:B 16. 在ES6中,如何将数组转换为字符串? A. arr.join(); B. arr.toString(); C. JSON.stringify(arr); 答案:A 17. 在ES5中,如何排序一个数组? A. arr.sort(); B. arr.sort(function(a, b) { return a - b; }); C. arr.sort(function(a, b) { return b - a; }); 答案:A 18. 在ES6中,如何排序一个数组? A. arr.sort(); B. arr.sort(function(a, b) { return a - b; }); C. arr.sort(function(a, b) { return b - a; }); 答案:B 19. 在ES5中,如何过滤一个数组? A. arr.filter(function(elem) { return elem > 0; }); B. arr.map(function(elem) { return elem * 2; }); C. arr.reduce(function(sum, elem) { return sum + elem; }); 答案:A 20. 在ES6中,如何过滤一个数组? A. arr.filter(function(elem) { return elem > 0; }); B. arr.map(function(elem) { return elem * 2; }); C. arr.reduce(function(sum, elem) { return sum + elem; }); 答案:A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值