上一篇博文学习变量声明带var和不带的区别.搜索相关的文章. 引出了另一个概念.

"use strict" 使用严格模式

对于一个使用者而不是概念研究者,我觉得没有意义争论或者讨论严格模式存在意义我只想记住他的作用是怎样的.使用他之后会怎样.

  • 1. 怎么写?

首先严格模式可以写在整个脚本或模块中,也可以写在函数中.如果写在全局环境,可以直接在文件的第一句加入"use strict"就可以了. 但是如果这么写的话你就惨了.

假如你的文件引入其它脚本文件时. 假如其它脚本没有启用严格模式你将面临很多问题.

所以建议把严格模式写在函数中,写在函数内的第一句就可以了.

  • 2. 有什么用?
  1. 去除with关键字,使用严格模式后,with关键字会报错不支持

    with(){
    }

    这样的写法了.

  2. 防止意外的全局变量,也就是上一篇文章的. 这样不带var的声明变量也不可以了.
    a = 2;
  3. 函数中未定义或者为null的this不在指向全局变量.防止依赖函数中的默认this行为代码出错.
    //"use strict"
    this.color = "red";
    function sayColor() {
    console.log(this.color);
    }
    sayColor();
    sayColor.call(null);
    undefined
    undefined

    严格模式

    "use strict"
    this.color = "red";
    function sayColor() {
    console.log(this.color);
    }
    sayColor();
    sayColor.call(null);
        console.log(this.color);
    ^
    TypeError: Cannot read property 'color' of undefined

    另一种情况

    "use strict"
    function Person(name) {
    this.name = name;
    } var me = Person("Nicholas");
    this.name = name;
    ^
    TypeError: Cannot set property 'name' of undefined

    原型继承

    "use strict"
    function Person(name) {
    this.name = name;
    } var me = new Person("Nicholas");

    没有报错. 原来这样. this = _proto_ = prototype 这些属性都是在new 一个新的对象. 就是在原型继承的时候赋值的.

  4. 重命名变量会报错,这个不多说了,都理解.
  5. 安全的eval()
        //"use strict";
    var y = eval("var x=10;");
    console.log(x); //
        "use strict";
    var y = eval("var x=10;");
    console.log(x);
        console.log(x);
    ^
    ReferenceError: x is not defined
  6. 禁止对只读属性赋值
       // "use strict";
    var person = {};
    Object.defineProperty(person, "name",{
    writable: false,
    value: "Nicholas"
    });
    person.name = "John";

    以上正确

        "use strict";
    var person = {};
    Object.defineProperty(person, "name",{
    writable: false,
    value: "Nicholas"
    }); person.name = "John";

    报错:

    c:\Users\Feng Huang\WebstormProjects\MemberManagement\test4.js:13
    person.name = "John";
    ^
    TypeError: Cannot assign to read only property 'name' of #<Object>

    提示只读属性不能赋值.

javascript的use strict(使用严格模式)的更多相关文章

  1. javascript高级程序设计读书笔记----严格模式

    ECMAScript5最早引入“严格模式". 使用 "use strict"开启严格模式 function test(){ "use strict"; ...

  2. javascript设计模式详解之命令模式

    每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题.思想是相通的.只不过不同的设计语言有其特定的实现.对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某 ...

  3. javascript设计模式详解之策略模式

    接上篇命令模式来继续看下js设计模式中另一种常用的模式,策略模式.策略模式也是js开发中常用的一种实例,不要被这么略显深邃的名字给迷惑了.接下来我们慢慢看一下. 一.基本概念与使用场景: 基本概念:定 ...

  4. JavaScript创建对象(三)——原型模式

    在JavaScript创建对象(二)——构造函数模式中提到,构造函数模式存在相同功能的函数定义多次的问题.本篇文章就来讨论一下该问题的解决方案——原型模式. 首先我们来看下什么是原型.我们在创建一个函 ...

  5. javascript开发HTML5游戏--斗地主(单机模式part3)

    最近学习使用了一款HTML5游戏引擎(青瓷引擎),并用它尝试做了一个斗地主的游戏,简单实现了单机对战和网络对战,代码可已放到github上,在此谈谈自己如何通过引擎来开发这款游戏的. 客户端代码 服务 ...

  6. javascript开发HTML5游戏--斗地主(单机模式part2)

    最近学习使用了一款HTML5游戏引擎(青瓷引擎),并用它尝试做了一个斗地主的游戏,简单实现了单机对战和网络对战,代码可已放到github上,在此谈谈自己如何通过引擎来开发这款游戏的. 客户端代码 服务 ...

  7. javascript创建对象的方法--动态原型模式

    javascript创建对象的方法--动态原型模式 一.总结 1.作用:解决组合模式的属性和函数分离问题  2.思路:基本思路和组合模式相同:共用的函数和属性用原型方式,非共用的的函数和属性用构造函数 ...

  8. JavaScript和angularJs语法支持严格模式:”use strict”

    如果给JavaScript和angularjs代码标志为“严格模式”,则其中运行的所有代码都必然是严格模式下的.其一:如果在语法检测时发现语法问题,则整个代码块失效,并导致一个语法异常.其二:如果在运 ...

  9. javascript中的Strict模式

    目录 简介 使用Strict mode strict mode的新特性 强制抛出异常 简化变量的使用 简化arguments 让javascript变得更加安全 保留关键字和function的位置 总 ...

随机推荐

  1. windows 下 wamp php单元测试工具PHPUnit的安装

    phpunit下载网站 http://www.phpunit.cn/ 一.安装PHPUnit 1.选择版本 我用的是php版本是5.6.25 所以我选择的是PHPUnit 5.7 2.安装过程 为 P ...

  2. 有人说,即使没有JavaScript,你也可以做网页。在纯HTML

    有人说,即使没有JavaScript,你也可以做网页.在纯HTML +服务器端语言理论中也可以完成所有功能,那么,为什么以及在哪里存在JavaScript?   JS,全称JavaScript   在 ...

  3. Linux查看修改时间、时区

    同步网络时间 yum install ntpntpdate time.nist.gov timedatectl set-timezone Asia/Shanghai如果上面time.nist.gov服 ...

  4. Nginx 到底可以做什么

    本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得,欢迎留言交流. Nginx能做什么 反向 ...

  5. Nginx高级应用之Location Url

    基本配置 为了探究nginx的url配置规则,当然需要安装nginx.我使用了vagrant创建了一个虚拟环境的Ubuntu,通过apt-get安装nginx.这样就不会污染mac的软件环境.通过vr ...

  6. hdoj1013(数根,大数,九余数算法)

    Digital Roots Problem Description The digital root of a positive integer is found by summing the dig ...

  7. NumPy 切片和索引

    NumPy 切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样. ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以 ...

  8. Selenium 定位元素原理,基本API,显示等待,隐式等待,重试机制等等

    Selenium  如何定位动态元素: 测试的时候会遇到元素每次变动的情况,例如: <div id="btn-attention_2030295">...</di ...

  9. ES5之函数的间接调用 ( call、apply )、绑定 ( bind )

    call().apply()的第一个实参是函数调用的上下文,在函数体内通过this来获得对它的引用. call()将实参用逗号分隔:apply ()将实参放入数组.类数组对象中. function h ...

  10. RxJava笔记

    网上搜索了一些关于 RxJava 的东西,对RxJava的定义自己理解如下: RxJava是要一种逻辑简洁的,通过一种扩展的观察者模式,来实现异步的一种链式编程.