首页 > 编程语言 >Javascript中的严格模式 “use strict“

Javascript中的严格模式 “use strict“

时间:2024-03-24 16:59:19浏览次数:17  
标签:use 错误 引发 Javascript 3.14 strict var

一、为什么使用严格模式?

在普通的 JavaScript 中,写错变量名会创建新的全局变量,
在严格模式中,写错变量名会抛出错误来提醒开发者

二、声明严格模式

通过在脚本或函数的开头添加 “use strict”; 来声明严格模式。"use strict" 指令只能在脚本或函数的开头被识别

  1. 在脚本开头进行声明,拥有全局作用域(脚本中的所有代码均以严格模式来执行)
"use strict";
x = 3.14;       // 这会引发错误,因为 x 尚未声明
"use strict";
myFunction();

function myFunction() {
     y = 3.14;   // 这会引发错误,因为 y 尚未声明
}
  1. 在函数中声明严格模式,拥有局部作用域(只有函数中的代码以严格模式执行)
x = 3.14;       // 这不会引发错误
myFunction();

function  myFunction() {
	"use strict";
	 y = 3.14;   // 这会引发错误
}

三、严格模式中不允许的事项

  1. 在不声明变量的情况下使用变量,是不允许的
"use strict";
num = 3.14;                // 这将引发错误
obj = {p1:10, p2:20};      // 这将引发错误
  1. 删除变量(或对象、函数)是不允许的
"use strict";
var x = 3.14;
delete x;                // 这将引发错误

function fn(p1, p2) {}; 
delete fn;                 // 这将引发错误
  1. 重复参数名是不允许的
"use strict";
function x(p1, p1) {};   // 这将引发错误
  1. 八进制数值文本是不允许的
"use strict";
var x = 010;             // 这将引发错误
  1. 转义字符是不允许的
"use strict";
var x = \010;            // 这将引发错误
  1. 写入只能获取的属性是不允许的
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // 这将引发错误
"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // 这将引发错误
  1. 删除不可删除的属性是不允许的
"use strict";
delete Object.prototype; // 这将引发错误
  1. 字符串 “eval” 不可用作变量
"use strict";
var eval = 3.14;         // 这将引发错误
  1. 字符串 “arguments” 不可用作变量
"use strict";
var arguments = 3.14;    // 这将引发错误
  1. with 语句是不允许的
"use strict";
with (Math){x = cos(2)}; // 这将引发错误
  1. 处于安全考虑,不允许 eval() 在其被调用的作用域中创建变量
"use strict";
eval ("var x = 2");
alert (x);               // 这将引发错误
  1. 严格模式中不允许使用为未来预留的关键词
  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // 这将引发错误

标签:use,错误,引发,Javascript,3.14,strict,var
From: https://blog.csdn.net/weixin_42554330/article/details/136990561

相关文章

  • PhpStrom启动报错, java.net.BindException: Address already in use: bind
    问题描述:今天启动phpstromIDE时,突然报错,报错信息如下图:问题分析1.不正确关闭应用(强制关闭):可能是之前启动了一个本地web服务占了端口,在没有停掉服务,直接关闭IDE导致的(尝试了重启电脑也没解决)2.其他应用占用端口:安装了Hyper-V导致端口被占用?显然我的是第一种情况问题解决......
  • react中什么时候使用useRef,直接在外层定义普通的变量可以吗
    react中什么时候使用useRef,直接在外层定义普通的变量可以吗在React中,useRef主要是用来创建一个可变的引用对象,它可以用来保存任何可变值,而且这个引用在组件重新渲染时始终保持不变。以下是几个典型使用场景:访问DOM元素:当你需要直接访问HTML元素时,可以使用useRef创建一个引......
  • 08-JavaScript事件监听
     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>JS-事件-事件绑定</title></head><body><!--点击按钮,在控制台打印相关信息--><inputtype="button"......
  • `ij_javascript_spaces_within_imports = true` 这个设置表示在 JavaScript 代码的
    #http://editorconfig.orgroot=true[*]#表示所有文件适用charset=utf-8#设置文件字符集为utf-8indent_style=tab#缩进风格(tab|space)indent_size=4#缩进大小end_of_line=lf#控制换行类型(lf|cr|crlf)trim_trailing_whitespace=true#去除......
  • useMemo
    useMemo我们应该如何去正确理解useMemo呢functionfib(n){console.info('计算函数被执行1')returnn<3?1:fib(n-2)+fib(n-1)}functionApp(){const[count1,setCount1]=useState(0)const[count2,setCount2]=useState(0)console......
  • const [increaseBigCats, increaseSmallCats] = useCatStore( (state) => [state.incr
    const[increaseBigCats,increaseSmallCats]=useCatStore((state)=>[state.increaseBigCats,state.increaseSmallCats],shallow);这段代码是在使用zustand这个React状态管理库。zustand提供了一种简洁的方式来创建可复用的状态存储,并允许组件通过hoo......
  • eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0 解释
    eslintsrc--extts,tsx--report-unused-disable-directives--max-warnings0解释一下这段命令这段命令是用来运行ESLint工具检查代码的,针对的是src目录下所有.ts和.tsx后缀的TypeScript文件。命令各部分的具体含义如下:eslint:这是执行ESLint工具本身的命令......
  • Dotnet8运行新问题-he configured user limit (128) on the number of inotify instan
    问题现象:System.IO.IOException:Theconfigureduserlimit(128)onthenumberofinotifyinstanceshasbeenreached,ortheper-processlimitonthenumberofopenfiledescriptorshasbeenreached      解决办法:修改配置:sudovim/......
  • 一文弄懂Javascript中的深拷贝和浅拷贝
    目录一文弄懂Javascript深拷贝与浅拷贝1Javascript数据存储规则2浅拷贝3部分深拷贝3.1Object.assign3.2slice()3.3concat()3.4拓展运算符4完全深拷贝4.1_.cloneDeep()4.2结构化拷贝4.3json.stringify()4.4循环递归4.5jQuery.extend()5总结一文弄懂J......
  • userInfo: Record<string, any> | null; 解释一下这个代码
    这段代码是TypeScript类型注解,用于定义变量userInfo的数据类型。具体解释如下:Record<string,any>:Record<Keys,Type>是TypeScript中的一个泛型类型,表示一个对象类型,其中Keys参数指定了对象的键类型,Type参数指定了对象的所有键对应的值的类型。在这里,Keys类型为st......