上一篇博文学习变量声明带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. Numpy数据处理函数

    Numpy函数介绍 import numpy as np #sqrt 计算各元素的平方根 arr = np.arange(10) np.sqrt(arr) array([0. , 1. , 1.414 ...

  2. 不同CSS技术及其CSS性能

    OOCSS样式:一个主class,包含所有的共同规则,然后一个独特的规则使用其他class .box {padding:25px;border:1px solid #000;border-radius ...

  3. yaml文件 *.yml 写法简介

    YAML(Yet Another Markup Language)(发音 /ˈjæməl/ ) 一种基于Unicode容易阅读,容易和脚本语言交互的,用来表达资料序列的编程语言. 适应场景 脚本语言: ...

  4. Flask中的蓝图(BluePrint)、

    蓝图 1.初识Flask蓝图(BluePrint) 创建一个项目然后将目录结构做成: user.py中的内容 from flask import Blueprint, render_template ...

  5. 18. 4Sum (通用算法 nSum)

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...

  6. oracle数据库导入导出问题

    场景描述: 1.做一个从UAT到PRD的Schema迁移,UAT环境有sys用户,PRD环境没有sys用户,由于权限限制,没办法使用expdp/impdp,只好选择exp/imp命令: 2.UAT和P ...

  7. 【转】Spring、Spring MVC、MyBatis整合文件配置详解

    见:http://www.tuicool.com/articles/eyINveF web.xml的配置 web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经支持注解配置方式 ...

  8. XHXJ's LIS(数位DP)

    XHXJ's LIS http://acm.hdu.edu.cn/showproblem.php?pid=4352 Time Limit: 2000/1000 MS (Java/Others)     ...

  9. AD操作

    加泪滴 批量添加覆铜过孔(先铺铜以后,再批量添加过孔) 开槽   在KEPP—OUT层 部分区域 不敷铜 开窗  

  10. 解决在Mac的Vmware Fusion中装win7系统和mac原生系统直接切换win7系统分辨率变化的问题

    虚拟机 - 设置 - 显示屏 - 全屏显示retina (此选项钩去掉)