ES5:
JSON.parse(str [, fn])方法:
作用: 将字符串转换成一个js对象
参数: @str 需要转换为对象的字符串
@fn(key, value) 返回的是处理结果
返回值: obj
JSON.stringify(obj [, fn])方法:
作用:
将js对象转换成一个字符串
参数: @obj 需要转换的对象
@fn(key, value) 返回的是处理结果
返回值: str
数组拓展方法:
Array.isArray(obj)方法:
作用:
判断是否是数组
参数: @obj 判断的对象
返回值: boolean
arr.fill(data)方法:
作用: 把数组的每个位置都变成data
参数: @data 传递的数据, 诺为函数,不会执行
返回值:
arr
arr.indexOf(item)
方法: 从前往后
arr.lastIndexOf(item)
方法: 从后往前
作用:
得到数组成员的索引值,如果不存在返回-1
参数: @item 查找的元素
返回值:
int
遍历方法:
arr.forEach(fn(value, index, arr))
方法:
作用: 遍历数组
参数: 回调函数
返回值: undefined
arr.map(fn(value, index, arr))
方法:
作用: 映射数组, 得到新数组
参数:
回调函数, 得到的新arr是回调函数的返回值
返回值: 新arr
arr.filter(fn(value, index, arr))
方法:
作用: 筛选数组; 遍历数组,
将数组中符合条件的成员保存为新数组
参数: 回调函数, 返回值布尔值, 表示筛选条件
返回值: 新arr
断言方法:
arr.some(fn(value, index, arr))
方法:
作用:
判断数组成员, 是否满足至少一个条件
参数: 回调函数, 返回值是判断条件
返回值: boolean
arr.every(fn(value, index, arr))
方法:
作用: 判断数组成员, 是否满足全部条件
参数: 回调函数, 返回值是判断条件
返回值: boolean
累积方法:
arr.reduce(fn(oldValue, value, index, arr))
方法: 从前往后
arr.reduceRight(fn(
oldValue, value, index, arr
))
方法: 从后往前
作用: 对数组执行累积运算, 遍历从第二次开始
参数:
@oldValue 上一次执行时累积的结果
返回值: 累积的结果
严格模式:
严格模式的意义:
在以前的模式中,书写的代码有一些问题, 比如: 污染了全局作用域, 代码不够优化等, js无法帮我们捕获这些问题
ES5新增严格模式,可以避免这些问题的产生,
优化代码, 提高代码执行效率
使用严格模式:
只需要在作用域开头插入一行字符串
"use strict", 支持严格模式的浏览器会自动切换到严格模式
严格模式下的限制:
严格模式下,
定义变量没有使用var会报错
严格模式下,
定义相同的参数名称会报错
严格模式下,
不允许定义相同属性名称
严格模式下,
不允许使用关键字、保留字、特殊变量作为变量名称。
严格模式下,
用delete删除变量, 会报错
正常模式下, 用delete删除变量, 方法失效, 但不会报错
严格模式下, 不允许使用8进制和特殊字符(比如换行符等)
正常模式下可以使用
严格模式下,
使用eval, 不会污染全局作用域, 如果想污染可以把eval保存在变量中使用
正常模式下, 可以使用, 并且会在全局作用域下创建变量
arguments.callee: 解决函数功能与函数名称耦合的问题
严格模式下,
不允许使用arguments.callee
with(context)语句: 进入某个作用域中, 方便调用该作用域的方法
严格模式下,
不允许使用with语句
局部严格模式:
在函数体内使用严格模式是局部的严格模式, 此时函数体内将转化一个严格模式,函数体外部是正常模式
局部严格模式对作用域的改变:
正常模式下函数内部作用域是全局作用域
局部严格模式下函数内部作用域是undefined
ES5新增方法:
Date对象: date.toJSON()方法: //date值的是Date的实例化对象
作用: 把日期对象转化成一个可读性强的日期格式
返回值: str
bind(fn, context, params...)方法:
作用:
为函数绑定作用域, 但不执行.
call和apply函数定义作用域的时候, 会立即执行;
参数: @fn执行的函数, @context绑定的作用域, @params...传入的参数
create(obj)方法:
作用: 实现继承参数对象; 实现原理是寄生式继承 (寄生工厂方法)
参数: @obj 被继承的对象
返回值: 新obj, 新对象的prototype为@obj
ES5特性:
Object.defineProperty(obj, property, config)方法:
作用:
设置对象属性的特性
参数: @obj 设置的对象
@property 该对象需要设置特性的属性
@config 配置对象, 为@property设置特性
value 定义属性值
writable 属性是否可以被更改
enumerable 属性是否可以被枚举(for in 循环)
configurable 属性特性是否可以被再次修改
set: fn(value) 当对象属性赋值时,触发这个方法
作用域: @obj
参数: 该属性赋值的值
在set方法中不能修改该属性, 否则无限循环
get: fn() 当对象属性获取的时候,会触发这个方法
作用域: @obj
参数: 无
在get方法中不能获取这个属性, 否则会无限循环
默认:
如果没有定义特性, 默认即可以被修改也可以被枚举.
如果定义了特性, 默认即不能被修改, 也不能被枚举
Object.defineProperties(obj, configObj)方法:
作用:
设置对象的多个属性的特性
参数: @obj 设置的对象
@configObj 配置对象
属性名为需要设置特性的属性
属性值为配置(等于上面的@config参数)
Object.getOwnPropertyNames(obj)方法:
作用:
获取属性名称
参数: @obj获取属性名称的对象
返回值: 所有属性名称构成的数组
注意:
只能获取对象上的直接属性名称, 不能获取原型上的
Object.getOwnPropertyDescriptor(obj, property)
方法:
作用:
获取属性特性对象
参数: @obj 操作的对象
@property @obj的属性
返回值: @property的特性对象
注意:
如果属性存在,没有定义特性, 默认值是true.
如果属性存在, 定义特性的时候,没定义的特性, 默认是false
如果属性不存在,被看作false
Object.seal(obj)方法:
作用:
封闭对象, 使其不能添加或删除属性
参数: @obj 需要被封闭的对象
注意:
封闭是单项的, 无法被解除
Object.isSealed(obj)
方法: 判断参数对象是否被封闭
Object.
freeze(obj)方法: 冻结参数对象, 使其不能添加、删除和修改(单向的,无法被解除)
Object.isFrozen(obj)方法: 判断参数对象是否被冻结
objAny.prototype.isPrototypeOf(obj)方法: 参数对象的原型是否是调用方法的这个原型
Object.getPrototypeOf(obj)方法: 获取对象原型