ES5
严格模式
理解:这种模式使得Javascript在更严格的语法条件下运行
作用:消除Javasscript语法的一些不合理、不严谨之处,减少怪异行为
使用:‘use strict’;(如果浏览器不支持的话,只解析为一条简单的语句,没有副作用)
注意事项:必须使用var声明变量
禁止自定义的函数中的this指向window
创建eval作用域
对象不能有重名的属性
JSON对象
JSON.stringifly(obj/arr) js对象转换为json对象(数组)
JSON.parse(json) json对象转换为js对象(数组)
Object扩展
ES5给Object扩展了两个常用静态方法
Object.crate(prototype,[descriptos])
* 作用: 以指定对象为原型创建新的对象
* 为新的对象指定新的属性, 并对属性进行描述
- value : 指定值
- writable : 标识当前属性值是否是可修改的, 默认为false
- configurable: 标识当前属性是否可以被删除 默认为false
- enumerable: 标识当前属性是否能用for in 枚举 默认为false
Object.defineProperties(object, descriptors)
* 作用: 为指定对象定义扩展多个属性
- get :用来获取当前属性值得回调函数
- set :修改当前属性值得触发的回调函数,并且实参即为修改后的值
* 存取器属性:setter,getter一个用来存值,一个用来取值
Array扩展
Array.prototype.indexOf(value) : 得到值在数组中的第一个下标
Array.prototype.lastIndexOf(value) : 得到值在数组中的最后一个下标
Array.prototype.forEach(function(item, index){}) : 遍历数组
Array.prototype.filter(function(item, index){}) : 遍历过滤出一个新的子数组, 返回条件为true的值
Function扩展
Function.prototype.bind(obj) :
* 作用: 将函数内的this绑定为obj, 并将函数返回
区别bind()与call()和apply()?
* 都能指定函数中的this
* call()/apply()是立即调用函数
* bind()是将函数返回
let
与var类似,用于声明变量
在块作用域内有效
不能重复声明
不会预处理,不存在变量提升
循环遍历加监听
使用let取代var是趋势
const
定义一个常量
特点:
不能修改
其它特点同let
应用
保存不用改变的数据
模板字符串 : 简化字符串的拼接
模板字符串必须用 `` 包含
变化的部分使用${xxx}定义
简化对象写法
省略同名属性值
省略方法的function