开启严格模式
1.在scripet标签中顶部属写 "use strict" ;
2.或者 在scripet标签中,书写 type="module" ;
开启严格模式后的规定
1.严格模式下不允许使用未定义的变量,必须使用let、const、或者var做定义变量或者常量后才能使用
a = 3 ;
console.log(a); //以前表示定义了全局变量a 然后给a赋值为3
//开启严格模式后则报错,显示a未定义
2.不允许同名参数出现
function fn(a,a){
console.log(a); //正常情况下不会报错,正常输出第二个a值为2
//开启严格模式后,会进行报错
}
fn(1,2)
3.不允许使用 with (看清楚是with不是width)
4.不能对只读属性赋值
var str = "aaa";
str.length = 10; //正常情况下不会报错
//开启严格模式后进行报错,显示length是只读属性
5.禁止使用八进制(因为有十六进制)
6.不能删除不可删除属性
var str = "aaa";
delete str.length; //正常情况下不会报错,开启严格模式后则会进行报错
7.eval 和 arguments 不能被重新赋值
正常情况下,虽然给他们赋值是一种不正确无意义的行为,但正常情况下不会报错;
开启严格模式后则会进行报错;
8.不能使用 arguments.calle 和 arguments.callee.caller ,使用则会报错
9.禁止this指向全局对象,顶层的this指向undefined;
function fn(){
console.log(this); //正常情况下,此处的this指向windows;
//开启严格模式后,this指向undefint
}
fn();
//注意一点 在回调函数中,this永远指向window
setTimeout(function(){
console.log(this); //因为这是一个回调函数,所以在严格和非严格的模式下,都输出windows
},100)
10.不能使用 函数.caller和 函数.arguments
function fn(){
........
}
fn.caller 或 fn.arguments; //正常情况下,输出null,开启严格模式后,禁止使用,如果使用直接报错
小总结:
以后不要使用 agruments ,改用点语法来获取更多参数来替换arguments
function fn(...arr){ //点语法替换了arguments
console.log(arr) //此处,arr是一个数组,里面存放了传来的参数 输出[1,2,3]
}
fn(1,2,3)
function fn(a,...arr){ //此处定义了一个a
console.log(arr) //则将参数第一个值赋值给a 剩余的还存放在数组中 则arr为[2,3]
}
fn(1,2,3)
11.增加了一些保留字,如:protected、static和interface