Javascript的严格模式strict mode详细介绍

Javascript的严格模式(Strict Mode)是ES5引入的一种新模式。它主要针对一些不规范的代码加强了规范性,以避免开发中一些隐形错误、提高代码质量和安全性。在Javascript中启用严格模式的方法是在代码开头添加"use strict";即可。

使用严格模式,将会导致Javascript的一些默认行为发生变化。

下面,我们将逐一讲解在使用Javascript严格模式下发生变化的几个方面:

变量声明

在非严格模式的Javascript中,如果我们不使用var或let等关键字来声明变量,那么Javascript会把这个变量默认为全局变量,而严格模式下的Javascript则不允许此种情况的发生。

示例1:

function test() {
    x = 10;
    console.log(x);
}
test();

在非严格模式下,x变量默认为全局变量,并输出10;而在严格模式下,此种方式会抛出一个Uncaught ReferenceError错误,因为x变量未定义。

示例2:

"use strict";
function test() {
    x = 10;
    console.log(x);
}
test();

在使用严格模式下,x变量未定义,会抛出一个ReferenceError错误。

严格模式下的函数

在严格模式下,函数的一些行为与非严格模式下会有所不同。

  1. 在非严格模式下,如果某个函数在全局作用域中被调用,那么其中的this变量默认指向全局对象(window);而在严格模式下,相同情况下,this默认为undefined,从而避免了一些潜在的问题。

示例3:

function test() {
    console.log(this);
}
test();

在非严格模式下,将输出window对象;而在严格模式下,将输出undefined

  1. 在严格模式下,不允许一个函数内部this指向全局对象,除非通过函数的调用或者apply()、bind()、call()方法将this指向其他对象。

示例4:

"use strict";
function test() {
    console.log(this);
}
test();  // 输出undefined
test.call("Hello");  // 输出"Hello"
只读属性

在严格模式下,对只读的属性进行赋值操作会抛出一个TypeError错误。

示例5:

"use strict";
var obj = {
    prop : 10
}
Object.defineProperty(obj, "prop", {writable : false});

obj.prop = 20;  // TypeError: Cannot assign to read only property 'prop' of object '#<Object>'

在这个例子中,我们定义了obj对象的prop属性为只读属性,但是在严格模式下尝试修改它的值,会抛出TypeError错误。

上面的这些仅仅是严格模式的一些变化,它不限于此。事实上,在严格模式下,还会有很多关键字、方法、特性都发生了变化。因此,使用Javascript严格模式能够更好的区分变量和函数作用域、提高代码健壮性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript的严格模式strict mode详细介绍 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Fuse.js模糊查询算法学习指南

    Fuse.js模糊查询算法学习指南 算法简介 Fuse.js是一款用于快速模糊搜索的JavaScript库。它使用了一种称为模糊查询算法的算法,能够在无需进行复杂的文件预处理或搜索索引的情况下,在大量数据中高效地进行模糊搜索。 Fuse.js算法的流程如下: 初始化:将查询的关键字转化为需要搜索的模式。 评估:根据搜索模式计算每个文本的匹配程度。 排序:将文…

    JavaScript 2023年6月11日
    00
  • Chrome扩展页面动态绑定JS事件提示错误

    Chrome扩展开发中,我们经常需要在选项页面或者弹窗页面中动态绑定JS事件。但是在实际开发的过程中,发现有时候动态绑定事件会出现错误,需要我们进行排查。下面是一个完整攻略,帮助开发人员解决这个问题。 1. 确认目标事件是否正确绑定 在进行动态绑定事件时,我们需要确认目标事件是否正确绑定。例如,我们在页面中找到一个按钮,需要在按钮上动态绑定click事件,如…

    JavaScript 2023年6月10日
    00
  • 使用JavaScript在html文档内添加新的元素节点

    使用JavaScript可以在html文档内添加新的元素节点,具体的步骤如下: 选中你想要添加元素的父节点 const parent = document.querySelector(‘#parent-id’); 这里假设你已经通过HTML的id属性找到了父节点,如果你不清楚可以查看querySelector的文档。 创建新节点 const newNode …

    JavaScript 2023年6月10日
    00
  • CI框架安全类Security.php源码分析

    下面是关于“CI框架安全类Security.php源码分析”的完整攻略。 CI框架安全类Security.php源码分析 简介 CodeIgniter(CI)框架的安全类Security.php提供了许多安全功能。本文将对该源码进行分析,以更好地理解这些功能。 防跨站脚本攻击(XSS攻击) XSS攻击通常使用HTML标记或JavaScript代码在Web页面…

    JavaScript 2023年6月11日
    00
  • JS跨域总结

    JS跨域总结攻略 什么是跨域 在浏览器中,一个Web页面从一个服务器的域名、端口或协议请求资源时,如果该请求目标与该Web页面的域名、端口或协议不一致,就会发生跨域。 JS跨域的原因 跨域问题的出现是因为浏览器的同源策略。同源策略是浏览器对JavaScript代码的安全限制,同源是指协议,域名,端口号均相同。浏览器阻止页面中的JavaScript程序去访问不…

    JavaScript 2023年6月11日
    00
  • Javascript aop(面向切面编程)之around(环绕)分析

    JavaScript AOP(面向切面编程)是一种可以帮助我们在不改变原有代码的前提下,在代码执行前、中、后插入新的逻辑的编程技术。其中,Around(环绕)是AOP的一种实现方式,它可以在目标方法被调用之前和之后执行自定义的方法。 下面是使用JavaScript实现Around AOP的完整攻略。 1. 定义目标方法 首先,我们需要定义一个目标方法,也就是…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript对象的深浅复制

    请参考以下完整攻略。 1. JavaScript对象的深浅复制 JavaScript中的对象赋值,涉及到两种复制方法:浅复制和深复制。 浅复制只复制变量对象本身及其属性的引用,针对基本数据类型是深复制,对于复杂数据类型则是浅复制。而深拷贝会完全复制原始对象和嵌套的所有对象,也就是说,新创建的对象与原始对象没有任何关联。 2. 浅复制 浅复制的实现方式有对象的…

    JavaScript 2023年5月27日
    00
  • JavaScript作用域与作用域链优化方式

    我来介绍一下JavaScript作用域和作用域链的优化方式。 什么是JavaScript作用域 JavaScript作用域指的是变量和函数可访问的范围。在JavaScript中,作用域分为全局作用域和局部作用域。 全局作用域:指在代码的任何地方都可以访问的变量和函数,一般在页面的顶部定义。 var globalVar = "我是全局变量"…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部