ES5 的嚴(yán)格模式
use strict? 嚴(yán)格語(yǔ)法的聲明
聲明變量必須使用var
禁止自定義的函數(shù)中的this指向window 構(gòu)造函數(shù)中調(diào)用的時(shí)候要用new
eval函數(shù)的作用,可以解析傳入進(jìn)來(lái)的字符串 嚴(yán)格模式下的eval里創(chuàng)建的變量不會(huì)污染全局。
對(duì)象不能有重名
JION 對(duì)象
stringify
js對(duì)象(數(shù)組)轉(zhuǎn)換成json對(duì)象
parse
將json對(duì)象轉(zhuǎn)換成js對(duì)象
Obiect 擴(kuò)展
object.create(obj {
sex:{
value:'男'
}
})
如果想要改變屬性值需要 writable:true
刪除 configurable:true
enumerbale :true
defineProperties 擴(kuò)展屬性 (obj,{
fullname:{
get:function(){? 獲取擴(kuò)展名的屬性的值,在獲取
return this..fristname +""+ this.lastname
}
set:function(data)監(jiān)聽(tīng)擴(kuò)展屬性。當(dāng)擴(kuò)展屬性發(fā)生變化的時(shí)候,會(huì)自動(dòng)調(diào)用 將變化的值作為實(shí)參傳入
console。log(“set()”,data)
}
})
Array 的擴(kuò)展
1. Array.prototype.indexOf(value) : 得到值在數(shù)組中的第一個(gè)下標(biāo)
2. Array.prototype.lastIndexOf(value) : 得到值在數(shù)組中的最后一個(gè)下標(biāo)
3. Array.prototype.forEach(function(item, index){}) : 遍歷數(shù)組
4. Array.prototype.map(function(item, index){}) : 遍歷數(shù)組返回一個(gè)新的數(shù)組,返回加工之后的值
5. Array.prototype.filter(function(item, index){}) : 遍歷過(guò)濾出一個(gè)新的子數(shù)組, 返回條件為true的值
Function的擴(kuò)展
1. Function.prototype.bind(obj) :
* 作用: 將函數(shù)內(nèi)的this綁定為obj, 并將函數(shù)返回
2. 面試題: 區(qū)別bind()與call()和apply()?
*都能指定函數(shù)中的this
* call()/apply()是立即調(diào)用函數(shù)
* bind()是將函數(shù)返回
foo。coll(obj , 33)
foo.apply(obj , [33])?
var ber = foo.bing(obj)
指定完函數(shù)中的this之后,他會(huì)立刻調(diào)用,而bing是需要將函數(shù)返回,然后再調(diào)用
ES6
let關(guān)鍵字
let類似var的變量聲明
塊的作用域有效
不能重復(fù)聲明
不會(huì)預(yù)處理,不存在變量的提升
let有自己的作用域
const關(guān)鍵字
定義一個(gè)常量,不能修改,其他的跟let特點(diǎn)一樣
變量的解構(gòu)賦值
解構(gòu)賦值的時(shí)候需要寫入obj中已有的屬性,也可以跟obj單個(gè)取出
數(shù)組是使用下標(biāo),里面可以隨便寫入。如果不想取哪個(gè),可以直接使用逗號(hào)隔離開(kāi)
模板字符串
1. 模板字符串 : 簡(jiǎn)化字符串的拼接
* 模板字符串必須用 `` 包含
* 變化的部分使用${xxx}定義
簡(jiǎn)寫對(duì)象
1. 省略同名的屬性值
2. 省略方法的function
3. 例如:
let x = 1;
let y = 2;
let point = {
x,
y,
setX (x) {this.x = x}
};
箭頭函數(shù)
沒(méi)有形參的時(shí)候,不能省略括號(hào),占位
let fun = ()=>console.log('dhfihuaihi')
fun()
只有一個(gè)形參的時(shí)候可以省略括號(hào)
let fun = A? => console.log(A)
fun(aljsdhf)
兩個(gè)及兩個(gè)以上,不能省略括號(hào)
let fun = (x,y)=>console.log('x,y')
fun(25,56)
函數(shù)體只有一條語(yǔ)句的時(shí)候表達(dá)式的{}可以省略掉,會(huì)自動(dòng)返回執(zhí)行語(yǔ)句的結(jié)果
let fun = (x,y) => {return x+y}
let fun = (x,y) =>? x+y
特點(diǎn)
簡(jiǎn)潔
箭頭函數(shù)沒(méi)有自己的this 箭頭函數(shù)的this不是調(diào)用的時(shí)候決定的,而是在定義的時(shí)候所處的對(duì)象就是 它的this
擴(kuò)展理解: 箭頭函數(shù)的this看外層的是否有函數(shù),如果有,外層函數(shù)的this就是內(nèi)部箭頭函數(shù)的this, 如果沒(méi)有,則this是window。
點(diǎn)運(yùn)算符
1. rest(可變)參數(shù)
* 用來(lái)取代arguments 但比 arguments 靈活,只能是最后部分形參參數(shù)
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. 擴(kuò)展運(yùn)算符
let arr1 = [1,3,5];
let arr2 = [2,...arr1,6];
arr2.push(...arr1)