ECMA Script
- 它是一种由ECMA组织(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范
- 而我们学的JavaScript是ECMA的实现, 但术语ECMAScript和JavaScript平时表达同一个意思
- JS包含三个部分:
- ECMAScript(核心)
- 浏览器端扩展
- 服务器端扩展
- ES的几个重要版本
- ES5 : 09年发布
- ES6(ES2015) : 15年发布, 也称为ECMA2015
- ES7(ES2016) : 16年发布, 也称为ECMA2016 (变化不大)
- 教程
- ES5
- http://www.zhangxinxu.com/wordpress/2012/01/introducing-ecmascript-5-1/
- http://www.ibm.com/developerworks/cn/web/wa-ecma262/
- ES6
- http://es6.ruanyifeng.com/
- ES7
- http://www.w3ctech.com/topic/1614
ES5
ES5兼容性
- IE8只支持defineProperty、getOwnPropertyDescriptor的部分特性和JSON的新特性
- IE9不支持严格模式, 其它都可以
- IE10和其他主流浏览器都支持了
- PC端开发需要注意IE9以下的兼容, 但移动端开发时不需要
严格模式
- 在ES5中,除了正常运行模式(混杂模式),ES5还添加了第二种运行模式:"严格模式"(strict mode),这种模式使得Javascript在更严格的语法条件下运行
- 严格模式的作用
- 使用严格模式
- 在全局或函数的第一条语句定义为: 'use strict';如果浏览器不支持, 只解析为一条简单的语句, 没有任何副作用
语法和行为改变:
- 必须用var声明变量
- 创建eval作用域
- 禁止this指向window
- 对象不能有重名的属性
- 函数不能有重名的形参
- 教程:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html
![]()
<script type="text/javascript">
'use strict'; // 使用严格模式
var str = 'string'; // 必须使用var来声明变量
function Person(name, age) {
this.name = name;
this.age = age;
}
// Person(); // 禁止自定义的函数中的this指向window
new Person('zh', 18);
var str = '123';
eval('var str = "234"; alert(str)'); // 创建eval作用域不会污染全局变量
alert(str);
// 对象不能有重名的属性
var obj = {
name: '123',
name: '234'
}
<script
View Code