Javascript 严格模式use strict详解
JavaScript的严格模式详解:更深入的理解与执行限制
JavaScript的严格模式(Strict Mode)是由ECMA-262规范定义的一种更严格的执行模式。在这种模式下,JavaScript会对一些不安全的代码行为施加更严格的限制,从而帮助开发者避免一些常见的错误。
一、如何启用严格模式
严格模式可以在整个脚本或函数级别启用。
1. 全局严格模式:在JS文件的最开始处添加 "use strict"; 就能启用全局严格模式。
2. 局部严格模式:在函数内部添加 "use strict"; 就能启用局部严格模式。
二、严格模式与非严格模式的差异
1. 在严格模式下,尝试使用delete操作符来删除变量会抛出错误,因为delete是不合格的标识符。而在非严格模式下,删除操作会失败并返回false。
2. 严格模式下,函数参数不能有重复的名称,否则会抛出错误。而在非严格模式下,即使有重复的参数名称,代码仍然可以执行,但结果可能不符合预期。
3. 严格模式下不允许使用八进制整数直接量。而非严格模式下,以0开头的数字会被认为是八进制数,这可能会导致一些不易察觉的错误。
4. 在严格模式下,arguments对象是传入函数内实参列表的静态副本,不再追踪参数的变化。而在非严格模式下,arguments对象里的元素和对应的实参是指向同一个值的引用。
除此之外,严格模式还有许多其他的限制和特性,例如:
变量必须声明,否则抛出错误。
对象字面量中的重复属性名称会抛出错误。
禁止this关键字指向全局对象。
字符串必须以引号包围等。
严格模式下的
让我们深入了解一下JavaScript中的严格模式。在这个特殊的模式下,代码被赋予了一些额外的检查与限制。当你执行`fn(5)`并定义函数`fn`时,你可能会惊讶地发现某些变量值的行为有所不同。
在严格模式下,当你尝试修改函数内部的参数值时,这个改变并不会影响`arguments[0]`的值。尽管你在函数内部将参数`a`重新赋值为`42`,但`arguments[0]`仍然保持其原始值。这是因为严格模式下,参数被视为不可变的,从而确保了函数的稳定性和可预测性。
非严格模式下的轻松体验
在非严格模式下,情况则有所不同。当你调用函数并传递参数时,你可以在函数内部自由地修改参数的值,并且这些改变会影响到`arguments[0]`的值。这种灵活性使得代码在某些场景下更为方便。
关键词的特殊待遇
严格模式有一些特殊的关键词,如`eval`和`arguments`,它们不能被当作普通变量来使用和赋值。如果你试图这样做,将会收到一个错误提示。这是为了确保代码的安全性和避免潜在的混淆。
递归的考验
在严格模式下,尝试使用递归调用时的`narguments.callee`会引发错误。这是因为严格模式禁止了对调用栈的某些检测能力,旨在提高代码的性能和安全性。而在非严格模式下,这种递归调用是允许的。但需要注意的是,递归调用应谨慎使用,避免无限循环导致的性能问题。
caller属性的
在JavaScript中,当一个函数被另一个函数调用时,被调用的函数内部有一个特殊的属性`caller`,它指向调用它的函数对象。但在严格模式下,尝试访问这个属性会报错。在非严格模式下,这个属性可以被正常使用。这是因为严格模式限制了某些可能导致混淆或性能问题的特性。
变量的声明与全局污染
深入JavaScript的严格模式(use strict)
在JavaScript中,严格模式(use strict)是一种可以选择的编程环境,它为开发者提供了更严格的错误检查和环境控制。这种模式有助于避免某些常见的编码错误,提高代码的稳定性和安全性。当我们在代码中启用严格模式时,需要注意一些重要的规则和特性。
让我们通过一个简单的例子了解严格模式的基本用法。假设我们有一个名为Clothes的构造函数,用于创建一个衣物对象,包含颜色、尺寸和价格属性。我们可以这样使用严格模式来处理这个对象:
```javascript
function Clothes() {
"use strict"; // 开启严格模式
this.color = "red";
this.size = "m";
this.price = "cheap";
}
var c1 = new Clothes();
with (c1) { // 使用with语句访问对象属性
var str = "颜色" + color + ",尺寸" + size + ",价格" + price; // 构建字符串描述衣物信息
document.write(str); // 在网页上输出描述信息
} // 输出结果:(颜色red,尺寸m,价格cheap)
```
在严格模式下,当我们使用`call`或`apply`方法调用函数时,如果传入null或undefined作为上下文(context),它们不会被自动转换为全局对象(在普通模式下会转换为window对象)。这是一个重要的区别,有助于我们更好地控制代码的执行环境。这对于避免潜在的问题和错误非常有帮助。
以上就是关于JavaScript严格模式的一些基本介绍和使用示例。希望对大家有所帮助。如果你在编程过程中遇到任何问题或疑惑,欢迎留言咨询。作为长沙网络推广,我会及时回复大家,并分享更多有关网络编程和推广的知识。请继续关注我们的更新,我们将持续为大家带来有关编程技术和网络推广的资讯和实用技巧。记得点赞和分享哦!让更多人了解和学习JavaScript的严格模式。
seo排名培训
- Javascript 严格模式use strict详解
- 朴灿烈与郑秀晶:介绍两人的故事与关系 改为:
- CI框架(CodeIgniter)实现的导入、导出数据操作示例
- jQuery插件HighCharts绘制2D金字塔图效果示例【附d
- 基于JavaScript实现TAB标签效果
- 如何有效实现远眺,看清远山轮廓
- vue.js分页中单击页码更换页面内容的方法(配合
- JavaScript的Vue.js库入门学习教程
- Javascript通过overflow控制列表闭合与展开的方法
- php+mysqli实现批量替换数据库表前缀的方法
- 过大年歌曲
- 疯狂原始人片尾曲
- Ajax的用法总结
- 邓紫棋歌曲《喜欢你》:如何表达这份深沉的情
- 欲练CSS ,必先解决IE的一些细节分析
- 费县515犯罪嫌疑人笔录