如我们所知,JavaScript 是一门灵活的语言。其灵活性同样也带来了很多坑,当然也有一些是设计缺陷。比如

  • 一个变量没有声明就赋值,默认是全局变量,如

    (function () {
    a = 3;
    })();
    console.log(window.a);  // 输出3
  • 对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。如
    var obj = {
    c: 3,
    c: 4
    }
    // obj 为 {c:4}

还有什么== , typeof 之类的坑,数不胜数。毕竟 JavaScript 之父设计这门语言只用了一个星期,呵呵。

那么我们有什么简单的办法来避免一些坑呢?

Coffeescript 是个不错的选择,不过有学习成本。更简单的方式,是用 JavaScript 的严格模式。

什么是 JavaScript 的严格模式

在 JavaScript 的严格模式下,对 JavaScript 的写法做了一些限制。如果在严格模式下违反了这些限制,代码就会报错。

设立严格模式的目的主要是:

  • 减少 JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为
  • 消除代码运行的一些不安全之处,保证代码运行的安全
  • 提高编译器效率,增加运行速度
  • 为未来新版本的Javascript做好铺垫(一些保留字如:class, enum, export, extends, import, super 不能做变量名)

如何使用

指定整个 JS 文件执行严格模式,则在文件第一行写

"use strict";

指定某个方法执行严格模式,则在方法第一行写 "use strict";, 如

function strict(){
    "use strict";
    return "这是严格模式。";
}

对于不支持严格模式的浏览器,会忽略 "use strict";

严格模式下的限制

  • 全局变量必须显式声明
  • 禁止使用with
  • 禁止this关键字指向全局对象
  • 禁止在函数内部遍历调用栈, 如
    function f1(){
      "use strict";
      f1.caller; // 报错
      f1.arguments; // 报错
    }
    f1();
  • 禁止删除变量
  • 对象不能有重名的属性
  • 函数不能有重名的参数
  • 禁止使用arguments.callee
  • 禁止对arguments赋值
  • 禁止用保留字(如 implements, interface, let, package, private, protected, public, static, yield 等)做变量名

上面只列举一部分,更多访问这里

JavaScript 严格模式介绍的更多相关文章

  1. 浅析JavaScript工厂模式

    这里主要介绍两种工厂模式,第一种“简单工厂模式”,第二种“工厂方法模式” 简单工厂模式 1.定义 由一个工厂对象决定对象创建某一种产品对象的的实例.主要用来创建同一类对象. 2.具体需求 现在有一个登 ...

  2. CDN模式介绍

    body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; }        CDN(content delivery networ ...

  3. JavaScript严格模式详解

    转载自阮一峰的博客 Javascript 严格模式详解   作者: 阮一峰 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict m ...

  4. JavaScript严谨模式(Strict Mode)

    下面的内容翻译自It’s time to start using JavaScript strict mode,作者Nicholas C.Zakas参与了YUI框架的开发,并撰写了多本前端技术书籍,在 ...

  5. Javascript编程模式(JavaScript Programming Patterns)Part 1.(初级篇)

    JavaScript 为网站添加状态,这些状态可能是校验或者更复杂的行为像拖拽终止功能或者是异步的请求webserver (aka Ajax). 在过去的那些年里, JavaScript librar ...

  6. Javascript 严格模式(strict mode)详解

    Javascript 严格模式详解   一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Ja ...

  7. Javascript 严格模式 strict mode(转)

    一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...

  8. 企业IT管理员IE11升级指南【4】—— IE企业模式介绍

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  9. javascript运行模式:并发模型 与Event Loop

    看了阮一峰老师的JavaScript 运行机制详解:再谈Event Loop和[朴灵评注]的文章,查阅网上相关资料,把自己对javascript运行模式和EVENT loop的理解整理下,不一定对,日 ...

随机推荐

  1. c# 实现文件批量压缩

    今天改一个网站的功能,网站提供一些微信的素材,每个页面对应一套素材,如果会员一张一张下载,那么网站交互性就有点太差了.所以修改的内容就是提供一个按钮,点击按钮将这套图片和网站信息进行打包下载. 思路: ...

  2. 曾经的10道JAVA面试题

    1.HashMap和Hashtable的区别. 都属于Map接口的类,实现了将惟一键映射到特定的值上.HashMap 类没有分类或者排序.它允许一个null 键和多个null 值.Hashtable ...

  3. sql日期函数

    1.sql常用日期函数 当我们在进行数据处理的时候,常常需要用到日期函数的计算,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配.只要数据包含的只是日期部分,运行查询就不会出问题. ...

  4. vagrant 设置除默认工项目之外的synced_folder一个坑

    vagrant和host共享的目录,模式是以host主机目录为主,vagrant目录为从,所以记住当你新建同步目录的时候一定要先把vagratn目录文件备份一下,不然会被host目录覆盖

  5. node开子线程模块--tagg2

    tagg2包同样具有tagg包的多线程功能,采用新的node-gyp命令进行编译,同时它跨平台支持,mac,linux,windows下都可以使用,对开发人员的api也更加友好.安装方法很简单,直接n ...

  6. to disable the entity lazy load, The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

    The ObjectContext instance has been disposed and can no longer be used for operations that require a ...

  7. linux JAVA JDK环境配置

    export JAVA_HOME=/usr/local/jdk1.7.0_45export JRE_HOME=/usr/local/jdk1.7.0_45/jreexport CLASSPATH=.: ...

  8. linux禁止root用户直接登录sshd并修改默认端口

    linux最高权限用户root,默认可以直接登录sshd.为了提高服务器的安全度,需要对它进行禁止,使得攻击者无法通过暴力破解来获取root权限. 1,新建一个用户: #useradd xxx (xx ...

  9. python的random函数

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  10. WINDOWS下,中文JSON格式读取报错处理:ValueError: No JSON object could be decoded

    File "C:\Python27\lib\json\__init__.py", line 290, in load **kw) File "C:\Python27\li ...