上一篇博文学习变量声明带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. JPA in

    CriteriaBuilder.In in = criteriaBuilder.in(root.get("field1")); for (String str : arr) { i ...

  2. inception+archery SQL审核平台

    关闭防火墙和selinux 宿主机安装mysql,创建archery数据库,并给所有权限,允许远程连接到该数据库 grant all privileges on *.* to 'root'@'%' i ...

  3. mock.js 劫持 ajax,模拟数据

    http://mockjs.com/ Mock.js 是一款前端开发中拦截Ajax请求再生成随机数据响应的工具.可以用来模拟服务器响应. 优点是非常简单方便, 无侵入性, 基本覆盖常用的接口数据类型. ...

  4. const 全面理解

    问题1:const int a : 和  int  const  a :的区别 定义一个变量: 类型描述符 + 变量名 类型描述符包括类型修饰符和数据类型. 类型修饰符有:short  long  u ...

  5. poj 1170状压dp

    题目链接:https://vjudge.net/problem/POJ-1170 题意:输入n,表示有那种物品,接下来n行,每行a,b,c三个变量,a表示物品种类,b是物品数量,c代表物品的单价.接下 ...

  6. 善于利用python中的os模块

    作为一个程序猿,平时善于利用python中的os模块进行路径等操作,会省去很多麻烦,下面总结一下我平时经常用到的方法: import os os.getcwd() # 获取当前文件所在的目录 os.p ...

  7. PL/SQL Dev连接Oracle弹出空白提示框的解决方法分享

    第一次安装Oracle,装在虚拟机中,用PL/SQL Dev连接远程数据库的时候老是弹出空白提示框,网上找了很久,解决方法也很多,可是就是没法解决我这种情况的. 出现这种问题,解决方法大概有这几种: ...

  8. oracle中获取当前整点和上一个小时整点,日期类型

    select to_date(to_char(sysdate,'yyyy-mm-dd hh'),'yyyy-mm-dd hh:mi:ss') from dual;select to_date(to_c ...

  9. 非常棒的轨迹插件Better Trails v1.4.6

    点击下载

  10. HDU 6214 Smallest Minimum Cut(最少边最小割)

    Problem Description Consider a network G=(V,E) with source s and sink t. An s-t cut is a partition o ...