javaScript中的严格模式

659 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

什么是严格模式

JavaScript通常情况下隐式运行在正常模式-“Sloppy Mode”,ES5及其版本之后,javaScript可以显示运行在严格模式-“Strict Mode”!在严格模式下。可以减少我们编写不安全的JavaScript代码,获得更加清大的错误检查机制。为了向后兼容,严格模式需要我们手动开启!

如何使用

全文档用

如果我们需要对所有的JavaScript代码进行严格模式的限制,我们只需要在文件顶部加上use strict就可以看了!请注意,这行代码需要浏览器支持ES5之后的JavaScript!

函数用

与全文档的用法类似,我们只需要在函数体的第一行加入use strict!

function foo() {
    'use strict';
    ...
}

严格模式下的代码

变量

严格模式静止创建全局变量,而不显示的声明他们! 例如下面的函数,在正常模式下并不会报错!

function foo() {
    test = 123;
}
foo();  
console.log(test);  

image-20220606194823623

但是在严格模式下,因为我们没有显式的声明test变量,此时会报错!所以,我们需要事先使用var,let和const来申明变量!

image-20220606195304670

PS: 严格模式下,无法删除变量

"use strict";
let test=0
delete test;

image-20220606195505823

函数

不允许重名形参名

这种情况基本也不会有人写吧?正常情况下,我们都是编写具有含义的变量名!

function sum(x, y, x) { 
  return x + y + x; 
}

上面的代码,在正常模式下可以运行,最终的结果是后面的x覆盖前面的x!如果是在严格模式下,则会直接直接报错!

image-20220606195849868

arguments简化

 function foo(){
        console.log(arguments)
    }
    foo()

正常模式下:

image-20220606200036643

严格模式下:

与正常模式下的对比,你会发现属性arguments.calleearguments.caller已经被弃用了!

image-20220606200145870

with不可用

八进制数不可用

"use strict";
console.log( 010 === 8)

image-20220606200945544

this在函数中未定义

请注意:这里的函数时非方法函数!因为方法与对象挂钩,有具体的this!

正常模式下,this通常时window对象!

  function foo(){
        console.log(this)
    }

image-20220606201157954

严格模式下,this时undefined