当前位置: 首页 > news >正文

解答严格模式

目录

  • 介绍
  • 打开方式
  • 严格模式的严格内容

介绍

顾名思义,就是在严格模式下代码必须严格符合规范

打开方式

使用'use strict'来打开

具有作用域

可以全局开启或函数内开启

全局开启可以在js文件顶部或script标签顶部加上这条命令

// 开启严格模式,以下代码全部进入严格模式
'strict';
// 类型检查(实例,构造函数)
function _classCallCheck(instance, Constructor) {
    if (!(instance instanceof Constructor)) {
        throw new TypeError("Cannot call a class as a function");
    }
};

函数内开启则在函数内顶部加入这条命令

let a;
function fn() {
    'use strict';
    console.log(this); // undefined
}

严格模式的严格内容

1、没有声明的变量不能使用

// 不开启严格模式
a = 1;
function fn() {
    console.log(a); // 1
}
fn();

// 开启严格模式
'use strict';
a = 1;
function fn() {
    console.log(a); // a is not defined
}
fn();

2、删除变量和不存在的属性会报错
一般使用delete删除对象不存在的属性也不会报错,不建议使用delete关键字取删除对象的属性

// 未开启严格模式
let a = 1;

delete a;

// 开启严格模式
'use strict';
let a = 1;

delete a;   // Delete of an unqualified identifier in strict mode.

3、函数中相同的形参名会报错

// 未开启严格模式
function aaa(aa, aa) {
    return aa + aa;
}
// 没有报错

// 开启严格模式
'use strict';
function aaa(aa, aa) {
    return aa + aa;
}
// Duplicate parameter name not allowed in this context

4、对象不能有重名的属性

现在严格模式也是后面覆盖前面的重名属性

'use strict';
var obj = {
    a: 'xinxin',
    a: 'qiqi'
};
console.log(obj); //{ a: 'qiqi' }

5、禁止八进制表示法

// 未开启严格模式
const aa = 0o77;
console.log(aa); // 63

// 开启严格模式
'use strict';
const aa = 077;
console.log(aa); // Octal literals are not allowed in strict mode.

// 使用0o不会报错

6、函数内部 this 值为 undefined

"use strict"
function aaa(){
    console.log(this); // undefined
}
aaa();

7、创设 eval 作用域
让eval()内形成一个新的作用域

'use strict';
const aa = 11;
console.log(eval("let aa = 22;aa"));    // 22

console.log(aa);       // 11

正常模式下,eval 语句的作用域,取决于它处于全局作用域,还是处于函数作用域。

8、保留字
为了向将来 Javascript 的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。使用这些词作为变量名将会报错。

'use strict';
const yield = 11;

console.log(aa);       // Unexpected strict mode reserved word

相关文章:

  • UE4初学笔记
  • windows下,cursor连接MCP服务器
  • TypeScript语言的计算机网络
  • JSON-LD 教程
  • 不花钱也能玩GPT-4o,国内可用
  • PyTorch使用(4)-张量拼接操作
  • Pinia 实战指南:Vue 3 的新一代状态管理工具
  • Springboot同时支持不同的数据库,Oracle,Postgresql
  • 【AI学习】初步了解TRL
  • pycharm 添加 pyside6 插件并修改 Ui 样式
  • 在亚马逊云科技上使用n8n快速构建个人AI NEWS助理
  • 与Linux操作系统相关的引导和服务
  • 图论:多源最短路
  • 【LeetCode77】组合
  • JS dom节点
  • Django分页教程及示例
  • 【Kafka基础】topics命令行操作大全:高级命令解析(2)
  • 深度解析 C# 中介者模式:设计与实战应用
  • vue3实现markdown工具栏的点击事件监听
  • Python设计模式:构建模式
  • 机器人为啥热衷“搞体育”,经济日报:是向加速融入日常生活发起的冲锋
  • 国家防汛抗旱总指挥部对15个重点省份开展汛前实地督导检查
  • 征稿启事|澎湃·镜相第三届非虚构写作大赛暨2026第六届七猫现实题材征文大赛
  • 通往国际舞台之路:清政府与万国公会的交往
  • 体坛联播|巴萨提前2轮西甲夺冠,郑钦文不敌高芙止步4强
  • 上交所五方面落实募资新规:强化关键少数责任和股东权利保障