javaScript中的严格模式

举报
搞前端的半夏 发表于 2022/06/30 21:49:20 2022/06/30
【摘要】 什么是严格模式JavaScript通常情况下隐式运行在正常模式-“Sloppy Mode”,ES5及其版本之后,javaScript可以显示运行在严格模式-“Strict Mode”!在严格模式下。可以减少我们编写不安全的JavaScript代码,获得更加清大的错误检查机制。为了向后兼容,严格模式需要我们手动开启! 如何使用 全文档用如果我们需要对所有的JavaScript代码进行严格模式...

什么是严格模式

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。