ES5 的严格模式
use strict 严格语法的声明
声明变量必须使用var
禁止自定义的函数中的this指向window 构造函数中调用的时候要用new
eval函数的作用,可以解析传入进来的字符串 严格模式下的eval里创建的变量不会污染全局。
对象不能有重名
JION 对象
stringify
js对象(数组)转换成json对象
parse
将json对象转换成js对象
Obiect 扩展
object.create(obj {
sex:{
value:'男'
}
})
如果想要改变属性值需要 writable:true
删除 configurable:true
enumerbale :true
defineProperties 扩展属性 (obj,{
fullname:{
get:function(){ 获取扩展名的属性的值,在获取
return this..fristname +""+ this.lastname
}
set:function(data)监听扩展属性。当扩展属性发生变化的时候,会自动调用 将变化的值作为实参传入
console。log(“set()”,data)
}
})
Array 的扩展
1. Array.prototype.indexOf(value) : 得到值在数组中的第一个下标
2. Array.prototype.lastIndexOf(value) : 得到值在数组中的最后一个下标
3. Array.prototype.forEach(function(item, index){}) : 遍历数组
4. Array.prototype.map(function(item, index){}) : 遍历数组返回一个新的数组,返回加工之后的值
5. Array.prototype.filter(function(item, index){}) : 遍历过滤出一个新的子数组, 返回条件为true的值
Function的扩展
1. Function.prototype.bind(obj) :
* 作用: 将函数内的this绑定为obj, 并将函数返回
2. 面试题: 区别bind()与call()和apply()?
*都能指定函数中的this
* call()/apply()是立即调用函数
* bind()是将函数返回
foo。coll(obj , 33)
foo.apply(obj , [33])
var ber = foo.bing(obj)
指定完函数中的this之后,他会立刻调用,而bing是需要将函数返回,然后再调用
ES6
let关键字
let类似var的变量声明
块的作用域有效
不能重复声明
不会预处理,不存在变量的提升
let有自己的作用域
const关键字
定义一个常量,不能修改,其他的跟let特点一样
变量的解构赋值
解构赋值的时候需要写入obj中已有的属性,也可以跟obj单个取出
数组是使用下标,里面可以随便写入。如果不想取哪个,可以直接使用逗号隔离开
模板字符串
1. 模板字符串 : 简化字符串的拼接
* 模板字符串必须用 `` 包含
* 变化的部分使用${xxx}定义
简写对象
1. 省略同名的属性值
2. 省略方法的function
3. 例如:
let x = 1;
let y = 2;
let point = {
x,
y,
setX (x) {this.x = x}
};
箭头函数
没有形参的时候,不能省略括号,占位
let fun = ()=>console.log('dhfihuaihi')
fun()
只有一个形参的时候可以省略括号
let fun = A => console.log(A)
fun(aljsdhf)
两个及两个以上,不能省略括号
let fun = (x,y)=>console.log('x,y')
fun(25,56)
函数体只有一条语句的时候表达式的{}可以省略掉,会自动返回执行语句的结果
let fun = (x,y) => {return x+y}
let fun = (x,y) => x+y
特点
简洁
箭头函数没有自己的this 箭头函数的this不是调用的时候决定的,而是在定义的时候所处的对象就是 它的this
扩展理解: 箭头函数的this看外层的是否有函数,如果有,外层函数的this就是内部箭头函数的this, 如果没有,则this是window。
点运算符
1. rest(可变)参数
* 用来取代arguments 但比 arguments 灵活,只能是最后部分形参参数
function fun(...values) {
console.log(arguments);
arguments.forEach(function (item, index) {
console.log(item, index);
});
console.log(values);
values.forEach(function (item, index) {
console.log(item, index);
})
}
fun(1,2,3);
2. 扩展运算符
let arr1 = [1,3,5];
let arr2 = [2,...arr1,6];
arr2.push(...arr1)