"use strict"详解
参考:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html
目的:
- 消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的JavaScript做好铺垫。
行为:
全局变量必须显示声明
- "use strict"
- v = 1 // 报错,v未声明
- for(i = 0;i<2;i++){ //报错,i未声明
- }
禁止使用with语句
因为with语句无法在编译时就确定,属性到底归属哪个对象。
- "use strict";
- var v = 1;
- with (o){ // 语法错误
- v = 2;
- }
创设eval作用域
- "use strict";
- var x = 2;
- console.info(eval("var x = 5; x")); //
- console.info(x); // 2
禁止this关键字指向全局对象
- function f(){
- return !this;
- }
- // 返回false,因为"this"指向全局对象,"!this"就是false
- function f(){
- "use strict";
- return !this;
- }
- // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
- function f(){
- "use strict";
- this.a = 1;
- };
- f();// 报错,this未定义
禁止在函数内部遍历调用栈
- function f1(){
- "use strict";
- f1.caller; // 报错
- f1.arguments; // 报错
- }
- f1();
禁止删除变量
严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。
- "use strict";
- var x;
- delete x; // 语法错误
- var o = Object.create(null, {'x': {
- value: 1,
- configurable: true
- }});
- delete o.x; // 删除成功
对象不能有重名的属性 函数不能有重名的参数
- "use strict";
- var o = {
- p: 1,
- p: 2
- }; // 语法错误
- function f(a, a, b) { // 语法错误
- return ;
- }
禁止八进制表示法
- "use strict";
- var n = 0100; // 语法错误
不允许对arguments赋值 arguments不再追踪参数的变化 禁止使用arguments.callee(已被ES5抛弃)
- function f(a){
- "use strict"
- arguments++; // 语法错误
- }
- function f(a) {
- a = 2;
- return [a, arguments[0]];
- }
- f(1); // 正常模式为[2,2]
- function f(a) {
- "use strict";
- a = 2;
- return [a, arguments[0]];
- }
- f(1); // 严格模式为[2,1]
保留字
- function package(protected) { // 语法错误
- "use strict";
- var implements; // 语法错误
- }
"use strict"详解的更多相关文章
- "严格模式" use strict 详解
一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...
- Javascript 严格模式use strict详解
1.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...
- Javascript 严格模式(strict mode)详解
Javascript 严格模式详解 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Ja ...
- (" use strict")Javascript 严格模式详解
Javascript 严格模式详解 转载别人的博客内容,浏览了一遍,没有全部吸收,先保存一下链接 http://www.ruanyifeng.com/blog/2013/01/javascript_s ...
- 详解javascript的类
前言 生活有度,人生添寿. 原文地址:详解javascript的类 博主博客地址:Damonare的个人博客 Javascript从当初的一个"弹窗语言",一步步发展成为现在前后端 ...
- PHP函数call_user_func和call_user_func_array详解
今天在群里面,有个叫lewis的在问call_user_func_array的用法,因为之前一直没有用过,也不能说什么,于是看一下手册,发现是这么写的: call_user_func_array (P ...
- 【转】jqGrid 各种参数 详解
[原文]http://www.cnblogs.com/younggun/archive/2012/08/27/2657922.htmljqGrid 各种参数 详解 JQGrid JQGrid是一个 ...
- 原生JS:String对象详解
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- HTML标签----图文详解
国庆节快乐,还在加班的童鞋,良辰必有重谢! 本文主要内容 头标签 排版标签:<p> <br> <hr> <center> ...
随机推荐
- Finding LCM (最小公倍数)
Finding LCM Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu [Submit] ...
- vue语法之拼接字符串
先来一行代码: <div class="swiper-slide" v-for="item in message"> <img v-bind: ...
- Log4net日志使用教程-控制台、文本、数据库三种记录方式
一.log4net简介: 1. Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的 ...
- Python自学笔记-Django分页器小实例
from django.core.paginator import Paginator iter = 'abcdefhijklmnopqw' paginator = Paginator(iter,4) ...
- 有人提了一个问题:一定要RESTful吗?
写在前面的话 这个问题看起来就显得有些萌,或者说类似的问题都有些不靠谱,世上哪有那么多一定的事情,做开发都不一定做多久呢,所以说如果你有这个疑问的话是真真有点儿不着调,不过可能也就是随口一问吧,没有深 ...
- python虚拟环境的安装配置
安装 使用pip安装 pip install virtualenv 因为已经安装过了,所以显示这样 在这里我想在这里推荐大家以后再安装类库时可以用豆瓣源来安装,速度很快,因为在国内访问 官方p ...
- 如何使用 C# 爬虫获得专栏博客更新排行
昨天,梦姐问我们,她存在一个任务,找到 关注数排行100 和 浏览量排行100 的专栏博客,在2017年还有更新的专栏. 梦姐说他要出去一趟,M大神在吃饭,于是我估算时间,只有半个钟. 整理一下:半个 ...
- HTML5中表单中新增加元素
新增input 内属性 1,required:若文本内容为空,阻止表单提交格式,写入单词即可 如:<input type="text" name="username ...
- C陷阱和缺陷学习笔记
这段时间把<C陷阱和缺陷>看了,没时间自己写总结.就转一下别人的学习笔记吧http://bbs.chinaunix.net/thread-749888-1-1.html Chapter 1 ...
- java将map拼接成“参数=值&参数=值”
Java将Map拼接成"参数=值&参数=值" 把一个map的键值对拼接成"参数=值&参数=值"即"username=angusbao& ...