ECMAScript 5 严格模式
1. 变量必须使用var声明,杜绝不小心将本地变量声明成一个全局变量
在常规模式下,如果我们声明一个变量时省略了var关键字,解析引擎会自动将其声明为全局变量,但在严格模式下,会直接抛出异常,不会为我们转为全局变量:
message = 'hello world'; var color = 'red';
delete color;
2. 禁止函数参数重名
3. 禁止对象属性重名
'use strict';
//it should throw a SyntaxError in ES5 strict mode
var person = {
name: 'Scott'
name: 'John'
};
console.log(person.name);
4.禁止使用八进制数字
以0开头的八进制数字常常会让开发者迷惑,严格模式禁止以0开头的八机制表示法,另外,ES6已经支持新的语法标准,八进制以0o来表示,这样一来就与16进制的0x形成统一的语法格式:
'use strict';
var a = 017; //Uncaught SyntaxError: ... var b = 0o17; //ES6 Octal syntax: 8 + 7 = 15
5. 强制为eval创建新作用域
常规模式下,使用eval函数可能会影响当前作用域或全局作用域,给程序的运行结果带来不确定性,严格模式为JavaScript程序创建了第三种作用域:eval作用域。eval函数中的字符串只能在eval作用域内运行,其结果不会影响外层作用域,下面这两种形式都可以使eval在严格模式下运行:
'use strict';
eval("var a = 1;");
console.log(a); //Uncaught ReferenceError: a is not defined //or eval("'use strict'; var b = 3;");
console.log(b); //Uncaught ReferenceError: b is not defined
6. 禁止对eval和arguments做非法操作
以下几种使用方式都会抛出语法错误:
使用var声明;
赋予另一个值:
尝试修改包含的值,如使用++;
用作函数名;
用作命名的函数参数;
7.禁止使用arguments.callee
8.禁止this指向全局
9. 函数必须声明在整个脚本或函数层面
'use strict';
if (true) {
function doSomething() {
console.log('1');
}
} else {
function doSomething() {
console.log('2');
}
} for (var i = 0; i < 5; i++) {
function doSomething() {
console.log('3');
}
} doSomething(); //Uncaught ReferenceError: doSomething is not defined
ECMAScript 5 严格模式的更多相关文章
- ECMAScript严格模式简介
写在前面 大家都知道使用"use strict"表示使用ECMAScript进行严格模式,使用"use strict"有两种方式 在文件头部写上它(使得整个脚本 ...
- ECMAScript 6 学习总结
1.什么是ES6? 简单的说 ES6 的第一个版本,在2015年6月发布了,正式名称就是<ECMAScript 2015标准>(简称 ES2015)在2016年6月,小幅修订的<EC ...
- 从零开始学 Web 之 ES6(一)ES5严格模式
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 看完我的笔记不懂也会懂----ECMAscript 567
目录 ECMAscript 567 严格模式 字符串扩展 数值的扩展 Object对象方法扩展 数组的扩展 数组方法的扩展 bind.call.apply用法详解 let const 变量的解构赋值 ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- 《JavaScript 代码优化指南》
~~教你向老鸟一样敲代码~~. 1. 将脚本放在页面的底部 ... <script src="./jquery.min.js"></script> &l ...
- ES5概述(ECMAScript262/5.1)
ES5概述(ECMAScript262/5.1) 本文参考:ES5概述 ECMAScript 是基于对象的: 基本语言和宿主设施都由对象提供,ECMAScript 程序是一组可通信的对象.ECMASc ...
- 【转】JavaScript常用代码书写规范
javascript 代码规范 代码规范我们应该遵循古老的原则:“能做并不意味着应该做”. 全局命名空间污染 总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块. 不推荐 1 2 3 var ...
- javascript 核心语言笔记 4 - 表达式和运算符
表达式(expression)是 JavaScript 中的一个短语(phrases),JavaScript 解释器会将其计算(evaluate)出一个结果.程序中的常量.变量名.数组访问等都是表达式 ...
随机推荐
- sessionStorage 和 localStorage的区别
sessionStorage.setItem('userName',userName) // 存 sessionStorage.getItem('userName') // 取 sessionStor ...
- <Python基础>python是如何进行内存管理的
.Python 是如何进行内存管理的?答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制⒈对象的引用计数机制Python 内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用 ...
- C# 中的三个高级参数 params
params params 关键字可以指定采用数目可变的参数的方法参数. 可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组. 还可以不发送参数. 在方法声明中的 params 关键 ...
- pywebview gui='cef' 生成app报错—— 中断点 已到达中断点
pywebview是一个轻量级跨平台包装器,允许在其自己的本机GUI窗口中显示HTML内容.它提供了桌面应用程序中Web技术的强大功能,隐藏了GUI基于浏览器的事实.这个玩意儿好啊,可以直接让我们做的 ...
- tensorboard在Mac OS X系统环境下如何启动
再次必须写一篇博客,一次来说明这打开tensorboard的艰难之路,遇到了好多错误,真的是走了好多弯路,最后还是解决了 一开始总是报错,不知道是为什么,其实还是自己没有看懂原理,就冲动的开始招呼画瓢 ...
- python全栈开发:字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 1.百分号方式 %[(name ...
- CTO职场解惑指南系列(一)
基于科技能够改变世界的事实,几乎每个公司的程序员都自带闪光灯.程序员的手和普通人的手自然是有区别的,“我们可是用双手改变了世界” .(码农真的是靠双手吃饭,呵呵) 这个世界上但凡靠双手吃饭就会特别不容 ...
- hdu6088 组合数+反演+拆系数fft
题意:两个人van石头剪子布的游戏一共n盘,假设A赢了a盘,B赢了b盘,那么得分是gcd(a,b),求得分的期望*\(3^{2*n}\) 题解:根据题意很明显有\(ans=3^{n}*\sum_{a= ...
- 第九章 Odoo 12开发之外部 API - 集成第三方系统
Odoo 服务器端带有外部 API,可供网页客户端和其它客户端应用使用.本文中我们将学习如何在我们的客户端程序中使用 Odoo 的外部 API.为避免引入大家所不熟悉的编程语言,此处我们将使用基于 P ...
- python相关软件安装流程图解————————python安装——————python-3.7.1-amd64
首先查看自己的系统版本 是32位的还是64位的 https://www.python.org/downloads/windows/ —————————python下载安装 开始———————————— ...