ECMAScript5
严格模式
-
理解
- 除了正常运行模式(混杂模式),ES5添加了第二种运行模式:“严格模式”(strict mode)。
- 顾名思义,这种模式使得Javascript在更严格的语法条件下运行
-
目的/作用
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为*
- 消除代码运行的一些不安全之处,为代码的安全运行保驾护航
- 为未来新版本的Javascript做好铺垫
-
使用
- 在全局或函数的第一条语句定义为: ‘use strict’;
- 如果浏览器不支持, 只解析为一条简单的语句, 没有任何副作用
-
语法和行为改变
- 必须用var声明变量
<script type="text/javascript"> 'use strict' username = 'yoliu' console.log(username) </script>
- 禁止自定义的函数中的this指向window
function Person(name, age){
this.name = name
this.age = age
}
Person('yoliu', 21) //当前自调用的话this指向window
正确:
function Person(name, age){
this.name = name
this.age = age
}
new Person('yoliu', 21) //此时this指向实例对象
- 创建eval作用域
- 非严格模式下eval函数中修改的同名全局变量和污染到全局变量
var str = 'NBA'
eval('var str = "CBA" alert(str)') //CBA
alert(str) //非严格模式下为CBA,严格模式下为NBA
- 对象不能有重名的属性
JSON对象
JSON.stringify(obj/arr)
js对象(数组)转换为json对象(数组)
JSON.parse(json)
json对象(数组)转换为js对象(数组)
Object扩展
ES5给Object扩展了一些静态方法, 常用的2个:
- Object.create(prototype, [descriptors])
- 作用: 以指定对象为原型创建新的对象,为新的对象指定新的属性, 并对属性进行描述
-
value : 指定值
-
writable : 标识当前属性值是否是可修改的, 默认为false
-
configurable: 标识当前属性是否可以被删除 默认为false
-
enumerable: 标识当前属性是否能用for in 枚举 默认为false