ECMAScript严格模式简介
写在前面
大家都知道使用"use strict"表示使用ECMAScript进行严格模式,使用"use strict"有两种方式
- 在文件头部写上它(使得整个脚本都使用严格模式)
- 在函数顶部写上它(只在函数内打开严格模式)
对于严格模式和非严格模式下,到底有哪些不同,下面我将一一道来。
变量
严格模式下 | 非严格模式下 |
不允许意外创建全局变量 | 允许省去var来创建全局变量 |
不能对变量调用delete操作符(也就是说使用delete来删除变量时操作会直接报错) | 允许使用delete但操作失败(也就是说使用delete来删除变量时操作时不会直接报错) |
对象
严格模式下 | 非严格模式下 |
不允许为只读属性赋值 | 允许为只读属性赋值 |
不允许对不可配置(nonconfiguratable)属性使用delete操作符 | 允许对不可配置(nonconfiguratable)属性使用delete操作符 |
不允许为不可扩展(nonextensible)的对象添加属性 | 允许为不可扩展(nonextensible)的对象添加属性 |
使用对象字面量时,属性名必须唯一 | 使用对象字面量时,属性名可以重复 |
函数
严格模式下 | 非严格模式下 |
函数参数不能重复 | 函数参数可以重复,如果重复的话,参数最终的取值为第二个,如果要取得第一个的话则得使用arguments |
函数参数和arguments是完全独立的 | 修改命名参数的值同时会反映到arguments对象当中 |
淘汰arguments.callee和arguments.caller | arguments.callee代表引用函数本身、arguments.caller调用当前引用函数的函数 |
不允许使用inplements、interface、let、package、private、protected、public、static、yield作为函数名 (因为这些是js当中的保留字并且已经在新的语法当中使用起来了) |
允许使用inplements、interface、let、package、private、protected、public、static、yield作为函数名 |
eval
在严格模式下在eval中不再创建变量或函数
可以在eval中声明变量和函数,但这些变量或函数只能被求值的特殊作用域中有效,随后就被销毁了。
eval和arguments
严格模式下禁止使用eval和arguments作为标识符,也不允许读写它们的值
非严格模式下可以重写eval,也可以给arguments赋值
抑制this
在非严格模式下使用apply和call方法时,null或undefined值被转换为全局对象
严格模式下,传进去的是什么,this就是什么
with
严格模式下已经废弃了with,但是非严格模式下可以使用with
parseInt的八进制
严格模式下去掉了javaScript的八进制字符量
作者:静逸
出处:http://www.cnblogs.com/liyunhua
本文版权归作者和博客园所有,欢迎转载,转载请标明出处。
如果您觉得本篇博文对您有所收获,觉得小女子还算用心,请点击右下角的 [推荐],谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?