博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript的use strict(使用严格模式)
阅读量:5270 次
发布时间:2019-06-14

本文共 1933 字,大约阅读时间需要 6 分钟。

上一篇博文学习变量声明带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);
    undefinedundefined

    严格模式

    "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);  //10
    "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 #

    提示只读属性不能赋值.

 

转载于:https://www.cnblogs.com/dangkei/p/4891265.html

你可能感兴趣的文章
打飞机游戏【来源于Crossin的编程教室 http://chuansong.me/account/crossincode 】
查看>>
[LeetCode] Merge Intervals
查看>>
【翻译自mos文章】当点击完 finishbutton后,dbca 或者dbua hang住
查看>>
Linux编程简介——gcc
查看>>
2019年春季学期第四周作业
查看>>
MVC4.0 利用IActionFilter实现简单的后台操作日志功能
查看>>
rotate the clock
查看>>
bugku 变量
查看>>
Python 环境傻瓜式搭建 :Anaconda概述
查看>>
数据库01 /Mysql初识以及基本命令操作
查看>>
数据库02 /MySQL基础数据类型以及多表之间建立联系
查看>>
Python并发编程04/多线程
查看>>
CF461B Appleman and Tree
查看>>
CF219D Choosing Capital for Treeland
查看>>
杂七杂八的小笔记本
查看>>
51Nod1353 树
查看>>
CF1215E Marbles
查看>>
BZOJ2339 HNOI2011卡农(动态规划+组合数学)
查看>>
octave基本操作
查看>>
axure学习点
查看>>