资讯专栏INFORMATION COLUMN

JavaScript严格模式介绍与总结

fancyLuo / 1028人阅读

摘要:严格模式的限制不允许使用未声明的变量报错未定义报错未定义不允许删除变量或对象。返回,因为指向全局对象,就是返回,因为严格模式下,的值为,所以为。

严格模式优势:

消除Javascript语法的一些不合理、不严谨之处,减少一些意外情况出现;
消除代码运行的一些不安全之处,保证代码运行的安全;
提高编译器效率,增加运行速度;
注意,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。

严格模式的限制: 不允许使用未声明的变量:
"use strict";
x = 3.14;                // 报错 (x 未定义)

"use strict";
x = {p1:10, p2:20};      // 报错 (x 未定义)

不允许删除变量或对象。
"use strict";
var x = 3.14;
delete x;                // 报错

不允许删除函数。
"use strict";
function x(p1, p2) {}; 
delete x;                // 报错 

不允许变量重名:
"use strict";
function x(p1, p1) {};   // 报错

不允许使用八进制:
"use strict";
var x = 010;             // 报错

不允许使用转义字符:
"use strict";
var x = 10;            // 报错

不允许对只读属性赋值:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // 报错

不允许对一个使用getter方法读取的属性进行赋值
"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // 报错

不允许删除一个不允许删除的属性:
"use strict";
delete Object.prototype; // 报错

变量名不能使用 "eval" 字符串:
"use strict";
var eval = 3.14;         // 报错

变量名不能使用 "arguments" 字符串:
"use strict";
var arguments = 3.14;    // 报错

不允许使用以下这种语句:
"use strict";
with (Math){x = cos(2)}; // 报错

由于一些安全原因,在作用域 eval() 创建的变量不能被调用:
"use strict";
eval ("var x = 2");
alert (x);               // 报错

禁止this关键字指向全局对象。
function f(){
    return !this;
} 
// 返回false,因为"this"指向全局对象,"!this"就是false

function f(){ 
    "use strict";
    return !this;
} 
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。

function f(){
    "use strict";
    this.a = 1;
};
f();// 报错,this未定义
保留关键字

为了向将来Javascript的新版本过渡,严格模式新增了一些保留关键字:

implements
interface
let
package
private
protected
public
static
yield
"use strict";
var public = 1500;      // 报错

更多信息参考:菜鸟教程

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106390.html

相关文章

  • 换个思路理解Javascript中的this

    摘要:事件处理函数中的把函数绑定到事件时,可以当作在上增加一个函数方法,当触发这个事件时调用上对应的事件方法。总结在需要判断的指向时,我们可以安装这种思路来理解判断在全局中函数中,若在全局中则指向全局,若在函数中则只关注这个函数并继续判断。 在网上很多文章都对 Javascript 中的 this 做了详细的介绍,但大多是介绍各个绑定方式或调用方式下 this 的指向,于是我想有一个统一的思...

    ninefive 评论0 收藏0
  • 01-html介绍和head标签

    摘要:三开发工具的使用使用技巧编辑器四介绍的概述全称,翻译为超文本标记语言,它不是一种编程语言,是一种描述性的标记语言,用于描述超文本内容的显示方式。【转】01-html介绍和head标签主要内容web标准浏览器介绍开发工具介绍HTML介绍HTML颜色介绍HTML规范HTML结构详解一、web标准web准备介绍:w3c:万维网联盟组织,用来制定web标准的机构(组织)web标准:制作网页遵循的规范...

    番茄西红柿 评论0 收藏0
  • JavaScript高级程序设计(第3版)第3章

    摘要:为此,本章将主要按照第版定义的介绍这门语言的基本概念,并就第版的变化给出说明。在严格模式下,中的一些不确定的行为将得到处理,而且对某些不安全的操作也会招聘错误。这是为不破坏语法而特意选定的语法。支持严格模式的浏览器包括和。 基本概念本章内容语法、数据 类型、流控制语句、函数符何语言的核心都尽然会描述这门语言最基本的工作原理。而捆 的内容通常都要沪深股市这门语言的语法、操作符、数据 类型...

    tracy 评论0 收藏0
  • JavaScript基础系列--打败this

    摘要:然后继续往后看,后面你会得到答案的想马上验证可以拖到最后到底是什么的确定是在的创建阶段,而的创建发生在浏览器第一次加载的时候或者调用函数的时候具体可参见之前写过的一篇文章基础系列执行环境与作用域链。 最近重温了一遍《你不知道的JavaScript--上卷》,其中第二部分关于this的讲解让我收获颇多,所以写一篇读书笔记记录总结一番。 消除误解--this指向自身 由于this的英文释义...

    BoYang 评论0 收藏0
  • 关于javascript 中的高级定时器的若干问题

    摘要:闭包闭包是指有权访问另一个函数作用域中的变量的函数当某个函数被调用时,会创建一个执行环境及相应的作用域链。要注意通过第句声明的这个方法属于构造函数生成的对象,而不属于构造函数的变量对象,也就是说,并不存在于作用域链中。 看到评论里有仁兄建议我试试箭头函数,真是受宠若惊,本来写这篇文章也只是想记录写要点给自己日后看的。今天早上看到一篇总结javascript中this的文章JavaScr...

    zr_hebo 评论0 收藏0

发表评论

0条评论

fancyLuo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<