首页 > 其他分享 >JS的严格模式

JS的严格模式

时间:2023-05-31 09:56:24浏览次数:35  
标签:use strict 抛出 模式 JS 严格 赋值

JavaScript的严格模式(Strict Mode)是一种在代码中启用的特殊模式,用于提供更严格的语法和错误检查,以改善代码质量和增强安全性。使用严格模式可以帮助大家避免一些常见的错误,并禁用一些不推荐使用的特性。

要启用严格模式,可以在代码的顶部或函数体的开头添加以下语句:

"use strict";

 

 

 

 

启用严格模式后,会应用一些限制和变化,包括以下几个方面:

1. 变量必须先声明后使用:在严格模式下,变量必须通过 var、let 或 const 关键字进行声明,否则会抛出 ReferenceError。在非严格模式下,未声明的变量会被隐式创建,并被添加到全局对象(比如浏览器环境中的 window 对象)中。

2. 禁止删除变量、函数或函数参数:在严格模式下,使用 delete 操作符删除变量、函数或函数参数会抛出 SyntaxError。

3. 禁止对只读属性进行赋值:在严格模式下,对只读属性(通过 const 关键字声明的常量)进行赋值会抛出 TypeError。

4. 禁止使用八进制字面量:在严格模式下,以 0 开头的数字会被视为八进制字面量,这在非严格模式下是允许的。严格模式下,使用八进制字面量会抛出 SyntaxError。

5. 限制 this 值:在严格模式下,函数内部的 this 值不再是全局对象(比如浏览器环境中的 window 对象),而是undefined,除非通过 call()、apply() 或 bind() 明确指定。

6. 禁止使用重复的函数参数名:在严格模式下,函数参数名不能重复。在非严格模式下,重复的函数参数名会被忽略。

7. 禁止使用 with 语句:在严格模式下,使用 with 语句会抛出 SyntaxError。with 语句在非严格模式下允许将对象的属性添加到作用域链中,但这被认为是不推荐使用的特性,因为它可能导致代码可读性和性能问题。

8. 限制 eval 和 arguments 的赋值:在严格模式下,无法对 eval 和 arguments 进行赋值。在非严格模式下,这种赋值是允许的。

 

 

 

 

下面是一些使用JavaScript严格模式的例子,展示了严格模式下的限制和行为变化:

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.

在严格模式下,无法使用 delete 操作符删除变量。

 

 

3. 禁止对只读属性进行赋值:

"use strict";

var obj = {};
Object.defineProperty(obj, "x", { value: 10, writable: false });

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

在严格模式下,对只读属性进行赋值会抛出错误。

 

 

4. 八进制字面量的限制:

"use strict";

var num = 012; // 抛出 SyntaxError: Octal literals are not allowed in strict mode.

在严格模式下,使用八进制字面量会被视为语法错误。

 

 

5. 函数中的 this 值为 undefined:

"use strict";

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

showThis(); // undefined

在严格模式下,如果函数内部的 this 值未明确指定,它将保持为 undefined。

 


这些是严格模式下的一些限制和变化,它们有助于提高代码的可靠性和可维护性。在编写新代码或更新现有代码时,启用严格模式是一种良好的实践,可以帮助捕获潜在的错误并遵循更严格的编码标准。

标签:use,strict,抛出,模式,JS,严格,赋值
From: https://www.cnblogs.com/ronaldo9ph/p/17445195.html

相关文章

  • jquery.qrcode.js 和 jQuery.print.js 简单使用
    最近因为需要在前端生成二维码并打印二维码及相关内容,使用了jquery,jquery.qrcode.js,jQuery.print.js来实现代码<!DOCTYPEhtml><html><scriptsrc="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><scriptsrc="https://c......
  • python内置库--json
    关于jsonJSON是一种按照JavaScript对象语法的数据格式相关介绍https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/JSON很多网页和app前后端数据交换的数据的格式就是json,打开F12或者抓包工具就可以看到py的json模块常用函数相关函数介绍json.dumps()......
  • js中的宏任务和微任务
    一、初识宏任务和微任务在JavaScript中,有两类异步任务队列:宏任务队列(macrotasks)和微任务队列(microtasks)。宏任务队列可以有多个,微任务队列只有一个。1、宏任务(macrotasks):就是JS内部(任务队列里)的任务,严格按照时间顺序压栈和执行。如:script(全局任务)、setTimeout、setInterval、s......
  • 处理json
     load和loads的区别load():load()方法用于从文件中读取JSON数据,并将其转换为Python对象。它接受一个文件对象作为参数,并将文件中的JSON数据加载为Python对象loads():loads()方法用于将JSON字符串转换为Python对象。它接受一个字符串作为参数,并将其解析为Python对象 解......
  • json_decode的用法
    正常使用$arr=json_decode('{"name":"tom","age":10}',true);var_dump($arr);上面代码会输出数组错误的json格式怎么输出$arr=json_decode("name",true);var_dump($arr);//null项目里很多时候调用外部接口,有的外部接口返回json字符串,前段时间碰到了一个项目,调用......
  • python pickle to json
    ref:https://gist.github.com/Samurais/567ebca0f59c612eb977065008aad867 '''Convertapklfileintojsonfile'''importsysimportosimportpickleimportjsondefconvert_dict_to_json(file_path):withopen(file_path,&......
  • AngularJS2.0 一个表单例子——总体说来还是简化了1.x 使用起来比较自然
    <!doctypehtml><html><head><metacharset="utf-8"><title>NgForm</title><scripttype="text/javascript"src="lib/[email protected]"></script><scripttype=&......
  • AngularJS2.0 quick start——其和typescript结合需要额外依赖
    AngularJS2发布于2016年9月份,它是基于ES6来开发的。运行条件!由于目前各种环境(浏览器或Node)暂不支持ES6的代码,所以需要一些shim和polyfill(IE需要)让ES6写的代码能够转化为ES5形式并可以正常运行在浏览器中。从上图可以看出在Es5浏览器下需要以下模块加载器:systemjs -通用模块......
  • threejs绘制球体
    threejs绘制球体在Three.js中,可以使用geometry对象和geometryMaterial对象来创建和渲染球体几何体。下面是一个绘制球体的示例代码://创建一个立方体几何体varcubeGeometry=newTHREE.BoxGeometry(0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5);......
  • Abstract Factory Pattern 抽象工厂模式简介与 C# 示例【创建型】【设计模式来了】
    〇、简介1、什么是抽象工厂模式?一句话解释:  通过对抽象类和抽象工厂的一组实现,独立出一系列新的操作,客户端无需了解其逻辑直接访问。抽象工厂模式(AbstractFactoryPattern)是一种创建型模式。它用于创建一组相关对象的家族。强调的是一组对象之间的协作关系,而不是单个对象之......