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

yizhihongxing

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日

相关文章

  • JS中new Date().Format(“yyyy-MM-dd”) 报错的解决

    JS中使用new Date().Format(“yyyy-MM-dd”)进行日期格式化时,会出现报错的问题。这是因为JS本身不支持Date对象的Format方法。要正确地格式化日期,需要使用JS的日期对象的原型扩展prototype方法。 具体的解决方法是:通过扩展JS中日期对象的原型,自定义一个Format方法,将日期格式化成所需要的字符串形式。以下是代码…

    JavaScript 2023年5月18日
    00
  • js与jquery正则验证电子邮箱、手机号、邮政编码的方法

    作为网站的作者,为了保证用户提交的数据有效和安全,我们需要对输入的电子邮箱、手机号和邮政编码进行正则验证。JavaScript和jQuery都可以进行正则验证,下面是针对这三种常见输入的完整攻略: 1. 电子邮箱验证 正则表达式 电子邮箱的验证需要用到正则表达式,下面是一个常用的正则表达式: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-]…

    JavaScript 2023年6月1日
    00
  • 让浏览器DOM元素最后加载的js方法

    关于让浏览器DOM元素最后加载JS方法,这主要是为了确保在运行JS之前,页面的DOM元素已经全部加载完毕,从而避免因为JS找不到需要操作的元素而产生错误。接下来我将为大家介绍两种方法。 方法一:使用window.onload window.onload是指在当前页面中所有的元素(图片、音频、视频等多媒体元素)加载完毕后,再去执行window.onload事件…

    JavaScript 2023年6月10日
    00
  • js实现的美女瀑布流效果代码

    这里是“js实现的美女瀑布流效果代码”的完整攻略: 瀑布流效果简介 瀑布流效果(Waterfall Flow)是指像瀑布一样一列接一列的布局方式。随着页面滚动,页面中的图片会自动根据设置好的列数和间距排列,并且会动态加载。瀑布流效果是现代网站中十分流行的一种图片展示方式。 实现方法 瀑布流效果的实现方法比较多,包括纯CSS实现和JS实现。纯CSS实现的瀑布流…

    JavaScript 2023年6月11日
    00
  • js事件on动态绑定数据,绑定多个事件的方法

    JavaScript中的事件机制是常见的Web前端开发基础,通过on事件可以实现动态绑定事件,并绑定多个事件,以下是详细的攻略: 1. on动态绑定数据 on事件可以通过DOM元素的属性方式进行设置,同时这个属性名称也必须遵循on开头的规则,如onclick、onload等。此外,我们还可以利用JavaScript的编程方式来实现事件的绑定。 以下是一个基本…

    JavaScript 2023年6月11日
    00
  • js的toUpperCase方法用法实例

    当你需要将 JavaScript 字符串中的所有字符都转换为大写时,你可以使用 toUpperCase() 方法。下面是关于如何在 JavaScript 中使用toUpperCase() 方法的完整攻略。 Markdown 格式文本 首先,您需要了解如何在 Markdown 中编写代码块。在代码块之间包含代码时,您可以使用反引号引用代码块: // 这里是代码…

    JavaScript 2023年6月10日
    00
  • jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题

    在IE6、7、8中,无法使用原生的JSON.stringify函数,因此如果需要将JavaScript对象转化为JSON字符串,我们需要使用jQuery中的$.parseJSON和$.stringify方法。 下面是解决方案的完整攻略: 引入jQuery库 在或中引入jQuery库: <!DOCTYPE html> <html> &l…

    JavaScript 2023年5月27日
    00
  • javascript setTimeout()传递函数参数(包括传递对象参数)

    JavaScript中的setTimeout函数用于在指定的时间内延迟执行一个函数或一段代码。该函数接受两个参数:要运行的函数和延迟执行的时间(以毫秒为单位)。在这里,我们将讨论如何传递函数参数(包括传递对象参数)。 传递函数参数 要向setTimeout函数传递一个函数参数,我们可以将函数名称作为第一个参数传递给setTimeout函数,并将函数参数作为第…

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