一、ES5严格模式
1.概念:
除了正常运行模式,ECMAscript5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式是的Javascript在更严格的条件下运行。
2.严格模式的作用:
a.消除了JS语法的一些不合理、不严谨之处,减少一些怪异行为;
b.消除代码运行的一些不安全之处,保证代码运行的安全;
c.提高编译器效率,增加运行速度;
d.为未来新版本的JS做好铺垫
注意点:同样的代码,在“严格模式”中,可能会有不一样的运行结果,一些在“正常模式”下可以正常运行的语句,在“严格模式”下将不能运行,掌握这些内容,有助于更细致深入的理解JS,让你编程一个更好的程序员。
二、严格模式的调用
1、如何进入严格模式?
进入严格模式的标志,书写这一行语句 "use strict"
老的浏览器会把他当成一串普通的字符串,加以忽略
2、“严格模式”有两种调用方式,适用于不同的场合;
针对整个脚本文件:将 "use strict" 放在脚本文件的第一行,则整个脚本文件都将以“严格模式”运行,
如果这行语句不在第一行,则无效,整个脚本以“正常模式”运行。
如果不同模式的代码文件合并成一个文件,这一点需要特别注意。
针对单个函数:将 "use strict" 放在函数的第一行,则整个函数以“严格模式”运行。
脚本文件的变通写法:因为第一种调用方式不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数中
三、进入严格模式的变化
进入严格模式之后,需要进行哪些行为变更:
1.全局变量声明时,必须加关键字(var)
正常模式:a = 10; console.log(a) //10
严格模式:a = 10; console.log(a) //a is not defined
2.this无法指向全局对象
正常模式:function fn(){ console.log(this) } //window
严格模式:function fn(){ console.log(this) } //undefined
3.函数内不允许出现重名参数
正常模式:function fn( a,b,b ){ console.log(a,b) }
fn(1,2,3) //1,3
严格模式:function fn( a,b,b ){ }
//报错:Duplicate parameter name not allowed in this context 在此上下文中不允许出现重复的参数名
4.arguments对象
4.1 arguments对象不允许被动态改变
正常模式:
function fn(a){
a=20;
console.log(a); //20
console.log(arguments[0]); //20
}
fn(10);
严格模式:
function fn(a){
a=20;
console.log(a); //20
console.log(arguments[0]); //10
}
fn(10);
5、不允许使用arguments.callee
6.新增的保留字:implements,interface,let,package,private,protected,public,static,yield
ES5新增数组方法:
1、indexOf(data,start)接收两个参数:要查找的项和(可选的)表示查找起点位置的索引
2、forEach() 循环 对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值
3、map(callback) ; 会遍历当前数组,然后调用参数中的方法,返回当前方法的返回值。
map可以改变当前循环的值,返回一个新的被改变过值之后的数组(map需return),一般用来处理需要修改某一个数组的值。映射
4、filter() 遍历和过滤。返回符合条件的元素的数组。filter需要在循环的时候判断一下是true还是false,是true才会返回这个元素。