JavaScript 严格模式(use strict)

使用 "use strict" 指令

"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。

它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。

"use strict" 的目的是指定代码在严格条件下执行。

严格模式下你不能使用未声明的变量。

支持严格模式的浏览器:
Internet Explorer 10 +、 Firefox 4+ Chrome 13+、 Safari 5.1+、 Opera 12+。

严格模式声明

严格模式通过在脚本或函数的头部添加 "use strict"; 表达式来声明。

在函数内部声明是局部作用域 (只在函数内使用严格模式)。

为什么使用严格模式:

  • 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
  • 消除代码运行的一些不安全之处,保证代码运行的安全;
  • 提高编译器效率,增加运行速度;
  • 为未来新版本的Javascript做好铺垫。

"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。

另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。

严格模式的限制

不允许使用未声明的变量,对象也是一个变量,如:x = {p1:10, p2:20};

不允许删除变量或对象,如:var x = 3.14;delete x; 

不允许删除函数,如:function x(p1, p2) {};delete x;

不允许变量重名,如:function x(p1, p1) {}; 

不允许使用八进制,如:var x = 010;

不允许使用转义字符,如:var x = \010;

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

不允许对一个使用getter方法读取的属性进行赋值,如:obj = {get x() {return 0} }

不允许删除一个不允许删除的属性,如:delete Object.prototype;

变量名不能使用 "eval" 字符串,如:var eval = 3.14;

变量名不能使用 "arguments" 字符串,如:var arguments = 3.14; 

不允许使用右边这种语句,如:with (Math){x = cos(2)};

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

禁止this关键字指向全局对象,如:

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

保留关键字

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

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IO 概括

# 一、概览 Java 的 I/O 大概可以分成以下几类: - 磁盘操作:File- 字节操作:InputStream 和 OutputStream- 字符操作:Reader 和 Writer- 对象操作:Serializable- 网络操作:Socket- 新的输入/输出&#xff1…

JavaScript this 关键字

面向对象语言中 this 表示当前对象的一个引用。 但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。 在方法中,this 表示该方法所属的对象。如果单独使用,this 表示全局对象。在函数中,this 表示全局对象。…

[css] 鼠标事件css的:hover和js的mouseover有什么区别?

[css] 鼠标事件css的:hover和js的mouseover有什么区别? JavaScript中鼠标事件有:onmouseover和onmouseout: 当鼠标移入和移出时触发事件onmousedown和onmouseup: 当鼠标按钮被按下或者松开时触发事件onclick和ondbclick &#xf…

【一步一步学习spring】spring入门

1. spring概述 spring是一个开源框架spring为简化企业级应用开发而生,解决的是业务逻辑层和其他各层的松耦合问题,他将面向接口的编程思想贯穿整个系统应用。spring是javaSE/EE的一站式框架。web层有spring-mvc,业务层有spring ioc、事务等机…

JavaScript 操作 HTML DOM (文档对象模型) 相关知识点

HTML DOM 树 通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。 JavaScript 能够改变页面中的所有 HTML 元素JavaScript 能够改变页面中的所有 HTML 属性JavaScript 能够改变页面中的所有 CSS 样式JavaScript 能够对页面中的所有事件做出反应…

[css] 举例说明你对指针事件(pointer-events)的理解

[css] 举例说明你对指针事件(pointer-events)的理解 pointer-events CSS 属性指定在什么情况下 (如果有) 某个特定的图形元素可以成为鼠标事件的 target。 当point-events 为none时,比如a连接不再生效个人简介 我是歌谣,欢迎和大…

JS运行三部曲

语法分析 预编译 解释执行 下面两句话能解决问题,但解决不了深入的问题,其实原理是 预编译产生的两个现象(规律)。 函数声明整体提升变量 声明提升 预编译前奏 imply global 暗示全局变量:即任何变量&#xff…

[BZOJ3791]作业

Description 众所周知,白神是具有神奇的能力的。比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成;对语文作业说一声“语”,语文作业就会出于畏惧而自己完成。今天,语文老师和数学老师布置…

[css] 如何用css实现把“我不爱996”变成“699爱不我”?

[css] 如何用css实现把“我不爱996”变成“699爱不我”? unicode-bidi 属性与 direction 属性一起使用,来设置或返回文本是否被重写,以便在同一文档中支持多种语言。 用direction属性设置rtl表示从右到左,默认是ltr从左到右的&am…

[css] scroll-snap-align属性的应用场景是什么?

[css] scroll-snap-align属性的应用场景是什么? 滚动一个列表时,控制列表中一个块始终完全在可视区内,如果滚动到一半可以回弹,保持整个块都在可视区。个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,…

STM32 软件模拟 IIC 代码,标准库、HAL库可用

1 #ifndef _IIC_H2 #define _IIC_H3 4 #include "stdio.h" 5 #include "stm32f1xx_hal.h"6 7 8 /* 定义控制 SDA SCL 的宏 标准库版9 #define I2C_SDA_UP GPIO_SetBits (GPIOC,GPIO_PIN_8) //SDA高电平 10 #define I2C_SDA_LOW GPIO_…

作用域及上下文理解

书本中的解释 [[scope]]:每个javascript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供javascript引擎存取,[[scope]]就是其中一个。[[scope]]:指的就是我们所说的作用域,其中存储了运行期上…

[css] css中Scroll-behavior属性有什么应用场景?

[css] css中Scroll-behavior属性有什么应用场景? 当用户手动点击导航或者API调用导致触发滚动操作时,scroll-behavior属性可以为滚动框设定滚动行为。auto表示立即滚动到指定位置,smooth则表示平滑过渡,需要一定的过度时间滚动到…

windows下安装ElasticSearch的Head插件

es5以上版本安装head需要安装node和grunt(之前的直接用plugin命令即可安装) (一)从地址:https://nodejs.org/en/download/ 下载相应系统的msi,双击安装。 (二)安装完成用cmd进入安装目录执行 node -v可查看版本号 (三&…

立即执行函数

定义: 此类函数没有声明,在一次执行过后即释放。适合做初始化工作。 //立即执行函数格式,此类函数执行完即销毁,除了这点,和其它函数一样 (function (){}()); W3C建议使用这种 (function (){})();//只有表达式才能被…

[css] 使用css实现对话气泡的效果

[css] 使用css实现对话气泡的效果 方法&#xff1a;使用圆角矩形作为对话的主体框&#xff0c;左侧或右侧增加附加三角形&#xff0c;三角形使用border样式设置来实现&#xff0c;相对定位和绝对定位结合使三角形附于圆角矩形左侧或右侧&#xff1b; html: <div class"…

iframe嵌套其它网站页面详解

iframe基本内涵 通常我们使用iframe直接直接在页面嵌套iframe标签指定src就可以了。 <iframe src"demo_iframe_sandbox.htm"></iframe> 但是&#xff0c;有追求的我们&#xff0c;并不是想要这么low的iframe. 我们来看看在iframe中还可以设置些什么属…

JavaScript 闭包

闭包概念&#xff1a; 当内部函数被保存到外部时&#xff0c;将会生成闭包。闭包会导致原有作用域链不释放&#xff0c;造成内存泄漏。 什么时候才会触发闭包呢&#xff1f; 当两个函数互相嵌套&#xff0c;把里面的函数被保存到了外部&#xff08;全局&#xff09;&#xff…

[css] 如何隐藏没有静音、自动播放的音视频?

[css] 如何隐藏没有静音、自动播放的音视频&#xff1f; 浏览器已禁止打开页面时自动播放&#xff0c;可以用iframe先播触发播放权限&#xff0c;然后再播放 做一个opacity:0 的假隐藏个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但…

PyAutoIt 安装(Windows 版)

转载于:https://www.cnblogs.com/Crixus3714/p/9592635.html