严格模式
程序员文章站
2022-05-01 22:51:38
...
定义变量
严格模式下不能忽略关键字直接定义变量
"use strict";
let m = 1; //m is not defined
delete 属性
// delete m //Delete of an unqualified identifier in strict mode.
console.log(m);
eval
在严格模式下,eval
不能再包含的上下文中创建变量或函数
eval("var a = 1");
alert(a);//a is not defined
函数
严格模式下,函数参数不能是相同的名字,并且修改参数的值不能反映到arguments
var obj = {
name:"kk",
name:'K&K'
}
console.log(obj.name)
// 严格模式下,函数的参数名不能相同
function sum(num){
num = 0; // 在严格模式下,修改参数的值不会反应到 arguments 对象上
console.log(num,',',arguments[0]);
}
sum(1);
不能使用 caller、callee
function num(n){
if(n<1){
return 1;
}else{
return n + arguments.callee(n-1)
}
}
num(6);
// 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
不能改变 this
严格模式下不能使用 apply 、call、bind 改变 this 的值,this 指向的谁就是谁,指向 null 就是null
var color = "red";
function colorFn(){
console.log(this.color);
}
colorFn.call(null);
严格模式下还删除了 with()
严格模式还去掉了 js 八进制字面量,以 0 开头的八进制字面量在之前经常报错,现在在严格模式下,八进制字面量已经无效了。
使用八进制字面量
"use strict"
var value = 010; // Octal literals are not allowed in strict mode.
//非严格模式下
var value = 010;
value; //8
下一篇: 过滤器(filter)实现用户登录拦截