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

JavaScript严格模式

JavaScript 的严格模式是一种限制 JavaScript 的一部分用法,以提高代码质量和安全性的模式。在严格模式下,不允许使用一些以前的不安全的语法,同时还引入了一些新的限制和改进。

要在 JavaScript 文件或函数中启用严格模式,可以使用 "use strict" 指令。

"use strict";
 

"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。

它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。

"use strict" 的目的是指定代码在严格条件下执行。

严格模式下你不能使用未声明的变量。

支持严格模式的浏览器:

Internet Explorer 10 +、Firefox 4+、 Chrome 13+、 Safari 5.1+、 Opera 12+。

严格模式对 JavaScript 引擎做了大量的改变。以下是一些主要的变化:

  1. 消除静默错误:严格模式下,JavaScript 会抛出更多的错误,而不是静默地忽略它们。例如,赋值给一个未声明的变量会抛出一个错误。

  2. 阻止一些不安全的操作:严格模式会阻止一些不安全的操作,比如删除不可删除的属性。

  3. 改变函数的行为:在严格模式下,函数的行为会发生一些变化。例如,通过 eval() 添加的变量不会出现在函数定义的作用域中。

  4. 改变 this 的行为:在严格模式下,函数内部的 this 在没有明确指定的情况下不会默认指向全局对象,而是 undefined

  5. 不允许重复的参数名:在严格模式下,函数参数不能有重复的名字,否则会抛出一个错误。

  6. 更多的保留字:严格模式下,一些以前的保留字(如 eval 和 arguments)在某些情况下会有更多的限制,不允许作为变量或函数名。

严格模式的限制以及相应的示例:

  1. 禁止使用未声明的变量
    "use strict";
    x = 10; // ReferenceError: x is not defined
     
    
  2. 禁止删除变量或函数
    "use strict";
    var x = 10;
    delete x; // SyntaxError: Delete of an unqualified identifier in strict mode.
     
    
  3. 禁止重复命名参数
    "use strict";
    function myFunction(a, a) { // SyntaxError: Duplicate parameter name not allowed in this context
        return a + a;
    }
     
    
    ​​​​​
  4. 禁止使用八进制表示法
    "use strict";
    var num = 010; // SyntaxError: Octal literals are not allowed in strict mode.
     
    
    ​​​​
  5. 禁止使用 with 语句
    "use strict";
    var obj = { x: 10, y: 20 };
    with (obj) { // SyntaxError: Strict mode code may not include a with statement
        console.log(x + y);
    }
     
    
  6. 严格模式中 this 的限制
    "use strict";
    function myFunction() {
        console.log(this);
    }
    myFunction(); // undefined
     
    
  7. 不允许使用转义字符:
    "use strict";
    var x = \010;            // 报错
  8. 不允许对只读属性赋值:
    "use strict";
    var obj = {};
    Object.defineProperty(obj, "x", {value:0, writable:false});
    
    obj.x = 3.14;            // 报错
  9. 不允许对一个使用getter方法读取的属性进行赋值
    "use strict";
    var obj = {get x() {return 0} };
    
    obj.x = 3.14;            // 报错
  10. 不允许删除一个不允许删除的属性:
    "use strict";
    delete Object.prototype; // 报错

保留关键字

为了向将来Javascript的新版本过渡,严格模式新增了一些保留关键字:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield

 

相关文章:

  • NCHAR_CS和CHAR_CS,导致UNION ALL 时,提示SQL 错误 [12704] [72000]: ORA-12704: 字符集不匹配
  • Python参数的默认值进阶250216
  • Linux系统Centos安装部署nginx代理
  • win10 系统 自定义Ollama安装路径
  • 从安装软件到flask框架搭建可视化大屏(二)——创建一个flask页面,搭建可视化大屏,零基础也可以学会
  • Pointnet++改进75:添加PSConv模块 | 新型的风车状卷积
  • 频率自适应扩张卷积(FADC)详解及代码复现
  • 保持角色一致性的绘本生成AI开源项目之Story-Adapter本地部署Windows篇
  • 第三章:组件开发实战 - 第一节 - Tailwind CSS 常用UI组件构建
  • 【第15章:量子深度学习与未来趋势—15.3 量子深度学习在图像处理、自然语言处理等领域的应用潜力分析】
  • 数据结构与算法学习笔记----数位统计DP
  • 阅读论文“用于车联网安全车载通信的机器学习技术“的学习笔记
  • 进程令牌:Windows 安全架构中的关键元素
  • 在SpringBoot中使用UniHttp简化天地图路径规划调用实践
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之设置默认收货地址及删除收货地址
  • 【Qt Qml】QML与C++交互
  • 跟着AI学习vue3第一章
  • 文档格式转换引擎开发:支持PDF与OFD的技术实现
  • LeetCode 热门100题-最大子数组和-错题
  • 初始JavaEE篇 —— Spring Web MVC入门(下)
  • 回家了!子弹库帛书二、三卷将于7月首次面向公众展出
  • 上博东馆常设陈列入选全国博物馆“十大精品”
  • 从良渚到三星堆:一江水串起了5000年的文明对话
  • 高飞已任南航集团党组副书记
  • 中欧互动中的合作与分歧:务实需求将克服泛安全化的“政治钟摆”
  • 消息人士称俄方反对美国代表参加俄乌直接会谈