`
hax
  • 浏览: 964922 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ECMAScript 3.1 的Strict模式

    博客分类:
  • JS
阅读更多
Mozilla的JavaScript引擎SpiderMonkey和Rhino很早开始引入了Strict模式,现在ES3.1规范草案将Strict模式进行了标准化。

在程序首或函数首使用Strict指令即可启用Strict模式。

废话不说,翠花,上代码:

<script>
// 本段脚本启用了strict模式
use strict

function f() {
  // strict模式代码中的函数也是strict的
  try {
    // strict模式代码中的eval也是strict的
    eval('x = 1') // strict模式中对未声明过的x赋值会抛出异常,
                  // 而不会在global上创建x
  } catch (e) {
    new Function('x = 1')() // strict模式代码中的new Function
                            // 是non-strict的!
  }
}

assert (window.x === undefined)
f()
assert (window.x === 1)

</script>

<script>
// 本段脚本是non-strict模式

function f1()
  // 此函数是non-strict模式
  // 此eval也是non-strict模式
  eval('x = 1') 
}

function f2() {
  // 此函数启用了strict模式
  use strict
  // 此eval也是strict模式
  eval('x = 1')
}

f3 = new Function('use strict; x = 1') // 也是strict模式

assert (window.x === undefined)
try { f2() } catch(e) {
try { f3() } catch(e) {
  f1()
}}
assert (window.x === 1)

</script>

(注意,由于尚没有ES3.1的完整实现,所以以上代码只能远观,不可亵玩……)

除了变量都需声明外,strict模式的重要限制包括:

1. block中不能出现var定义,包括if、for、while、switch等结构中都不能有var定义!
2. eval中的var/function声明被局部化(类似Function构造器):
new function () {
  eval('var x=1; alert(x);')  // x is only accessible in the eval code
  alert(x);  // error
}

3. eval只能直接调用,任何间接调用(如eval.call)或试图将eval赋给其他变量,都会扔出EvalError。
4. 不能包含with语句!
5. 不能使用caller和arguments.callee属性!
6. 普通的函数调用中this是null,而不是global对象。

其他不太重要的改变包括:赋值、++和--操作等用于只读属性、不可扩展对象时,delete操作用于不可删属性时,可能会扔出TypeError;赋值、delete操作还可能会扔出ReferenceError。函数不能有同名参数;修改arguments[n]不会影响对应的具名参数,反过来也一样。

注:以上据ES3.1 2008年12月的草案。
3
0
分享到:
评论
1 楼 tym1193 2009-12-08  
严谨了很多么
arguments.callee和caller可惜了 匿名函数不好处理了
try..catch还是不错的东西

相关推荐

    ECMAScript 5严格模式(Strict Mode)介绍

    ECMAScript 5严格模式(Strict Mode)是JavaScript的一个重要特性,它旨在增强代码的可靠性和安全性。严格模式通过对语法的限制和抛出更多异常,帮助开发者编写更规范的代码,减少潜在的错误。 启用严格模式主要有...

    ECMAScript全套(5,6,2018).zip

    该版本强化了一些现有特性,例如严格模式(use strict),它使得开发者可以启用更严格的错误检查和限制,有助于编写更可靠的代码。此外,ES5还引入了数组的新方法,如`forEach()`、`map()`、`filter()`、`reduce()`...

    ECMAScript中文最新(ECMA262)

    ECMAScript2021中文最新,ECMAScript2021中文文档,第1-6章,持续更新,喜欢请star。git地址https://github.com/fangniyima/ECMAScript-notes

    ECMAscript

    ### ECMAscript基础知识点详解 #### 一、ECMAscript概述 ECMAscript,通常简称ES,是一种脚本语言的标准规范,由欧洲计算机制造商协会(ECMA International)制定,旨在提供一种标准的脚本语言语法和功能,用于...

    JavaScript的strict模式与with关键字介绍

    其中之一便是“严格模式”(strict mode),这使得JavaScript的语法变得更加严格,旨在消除JavaScript中一些不合理的、不便于维护的特性。严格模式下,原先一些常见的导致错误的代码将不再被允许执行,其中包括强制...

    ecmascript手册

    1. **正则表达式(Regular Expressions)**:提供了一种强大且灵活的方式来匹配文本模式,是进行文本处理和数据验证的重要工具。 2. **字符串处理(String Handling)**:包括更丰富的字符串操作函数,使得字符串的...

    前端开源库-strict-mode

    严格模式最早出现在ECMAScript 5规范中,其目的是为了提供一种更严格的JavaScript编程环境,以避免旧版本中的一些潜在问题和不推荐使用的特性。启用严格模式后,JavaScript引擎会更加严格地解析和执行代码,对于一些...

    前端开源库-use-strict

    在JavaScript的世界里,"use strict" 是一个非常重要的指令,用于启用ECMAScript规范中的严格模式。严格模式是一种更安全、更严格的JavaScript执行环境,它旨在消除语法错误,避免一些意外的行为,并强制开发者遵循...

    ecmascript 6 入门.pdf

    ES3.1被重新命名为ES5,并于2009年12月正式发布。ES6最初作为JavaScript.next的一部分,后来演变成独立的标准。 ES6引入了多种新的语法特性,包括但不限于let和const命令、变量的解构赋值、字符串的扩展、数值的...

    design-patterns-es:EC在ECMAScript中实现的设计模式(GoF)。 代码示例原则

    ECMAScript中的设计模式 英文| 在ECMAScript中实现的设计模式(GoF)。 代码示例原则: 极简主义 抽象的 指导 细节 :green_book: 创作模式 描述对象实例化方式的创建模式,并着重于类的实例化。 :green_heart: ...

    Javascript 严格模式use strict详解

    JavaScript的严格模式(use strict)是ECMAScript规范中引入的一种模式,旨在强化JavaScript的语法,提高代码质量,减少潜在的错误。它通过增加额外的限制来帮助开发者编写更安全、更可维护的代码。 首先,严格模式...

    Qt-Quick核心编程之ECMAScript初探,适合Qt初学者

    ### Qt Quick核心编程之ECMAScript初探 #### 一、ECMAScript与JavaScript的关系及在Qt中的应用 **ECMAScript**与**JavaScript**之间的关系一直是开发领域中容易混淆的概念之一。简单来说,ECMAScript是一种规范或...

    ECMAScript5.1中文版

    js 学习必备。 ECMAScript5.1中文版

    JavaScript权威指南-ECMAScript5.pdf

    12. **ECMAScript5**:ECMAScript是JavaScript的标准,第五版引入了严格模式、对象字面量的改进、JSON支持、函数绑定、数组和对象的新方法等特性。 13. **函数式编程**:虽然JavaScript并非纯函数式语言,但其支持...

    ECMAScript6 入门及环境搭建

    ES4的部分功能被纳入ES3.1,并被命名为ES5。ES5在2009年发布,ES6则在2015年发布,也被称为ECMAScript 2015。 ES6带来了诸多的改变,包括新的语法特性,比如let和const关键字、箭头函数、模板字符串、解构赋值、类...

    ECMAscript2018规范

    资源名称:ECMAscript2018规范内容简介:ECMAscript 2018(第九版 JS)已于 6 月底正式发布,带来了许多新特性。ECMAscript 2018 于今年2月出炉草案,TC39 技术委员会每两个月开会一次,讨论当前...

    ECMAScript概述

    ECMAScript,通常简称为ES,是JavaScript编程语言的标准,由欧洲计算机制造商协会(ECMA)制定并维护的ECMA-262规范定义。这个标准最初是基于Brendan Eich创建的JavaScript语言,目的是为了让脚本语言在不同平台上...

    ECMAScript 6入门.pdf

    ECMAScript 6,也被简称为ES6,是JavaScript语言的下一代标准,它的发布目的是为了让JavaScript语言能够用于编写更复杂的大型应用程序,进而成为企业级开发语言。ES6在2015年6月正式发布,并且按照计划,标准制定者...

Global site tag (gtag.js) - Google Analytics