欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

严格模式

程序员文章站 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