一:嚴(yán)格模式
除了正常運(yùn)行模式(混雜模式),ES5添加了第二種運(yùn)行模式:"嚴(yán)格模式"(strict mode)佃扼,顧名思義,這種模式使得Javascript在更嚴(yán)格的語(yǔ)法條件下運(yùn)行。
針對(duì)整個(gè)腳本文件:將`use strict`放在腳本文件的第一行汗盘,則整個(gè)腳本文件將以嚴(yán)格模式運(yùn)行
針對(duì)單個(gè)函數(shù):將`use strict`放在函數(shù)體的第一行,則整個(gè)函數(shù)以嚴(yán)格模式運(yùn)行
區(qū)別
- 必須用var聲明變量
- 禁止自定義的函數(shù)中的this指向window
- 對(duì)象不能有重名的屬性
-在正常模式中询一,如果一個(gè)變量沒(méi)有聲明就賦值隐孽,默認(rèn)是全局變量。嚴(yán)格模式禁止這種用法健蕊,全局變量必須顯式聲明菱阵。
二object擴(kuò)展
ES5給Object擴(kuò)展了一些靜態(tài)方法,常用的有2個(gè)缩功。
1.Object.create(prototype, [descriptors])
例:var a = { username:'admin', password:'123456' }
var c = Object.create(a,{sex:{ value:'男',writable:false,ennumberable:true } })
2.Object.defineProperty(obj2, 'sex', {
? ? ? ? value: 'cc',
? ? ? ? writable: true,
? ? ? ? configurable: true,
? ? ? ? enumerable: true,
? ? ? });
Object.defineProperties(obj2, {
? ? ? ? fullName : {
? ? ? ? ? ? get : function () {
? ? ? ? ? ? ? ? return this.firstName + '-' + this.lastName
? ? ? ? ? ? },
? ? ? ? ? ? set : function (data) {?
? ? ? ? ? ? ? ? var names = data.split('-');
? ? ? ? ? ? ? ? this.firstName = names[0];
? ? ? ? ? ? ? ? this.lastName = names[1];
? ? ? ? ? ? }
? ? ? ? }
? ? });
三let作用域晴及,const 一般定義常量,需將常量大寫(xiě)
let只在所屬的代碼塊中起作用例:
/var btn = document.querySelectorAll('button')
for(leti = 0;i<10;i++){
?????btn[i].onclick = function(i){
????console.log(i)
?????}
?}//這里只能用let聲明嫡锌,var定義的話(huà)虑稼,之前i變量最終會(huì)被垃圾回收機(jī)制銷(xiāo)毀,變成10
四promise
當(dāng)ajax請(qǐng)求出現(xiàn)遞歸時(shí)世舰,即多層嵌套的ajax請(qǐng)求出現(xiàn)時(shí)动雹,可用
promise()一旦調(diào)用 必須搭配 function,Promise(function(resolve,reject)
var p1 = new Promise((resolve,reject) =>{}); //resolve異步請(qǐng)求成功,reject異步請(qǐng)求失敗
var p1 = new Promise((resolve,reject) =>{
? ? if(true){resolve()}else{reject()}
})
p1.then(function(){})
一般是當(dāng)所有異步加載(不一定要展示到網(wǎng)頁(yè)上)結(jié)束以后跟压,將異步操作放入到promise對(duì)象內(nèi)部
var p = Promise.all(plist)? ??p.then(function(res){}) //這是所有的都加載完了再定義p對(duì)象
var p = Promise.race(plist)?//這是有一個(gè)加載成功了就定義p對(duì)象胰蝠,只返回第一個(gè)加載成功的
迭代器與生成器:
proxy源碼實(shí)現(xiàn)原理:
DOM.div(({id:'d1','class':'redBg'},'helloworld','你好'))
模塊化開(kāi)發(fā):
<script src="" type="module"></script>引入某個(gè)模塊
模塊內(nèi)部
let a =123;let b =456;let c =789;
export {a};
export ;? ? ? ? ??//模塊導(dǎo)出震蒋,能輸出多個(gè)變量茸塞,文件導(dǎo)入時(shí)必須與變量名相同
export default c;//模塊默認(rèn)導(dǎo)出,只能輸出一個(gè)變量查剖,文件導(dǎo)入時(shí)不需要與變量名相同
那么在導(dǎo)入頁(yè)面應(yīng)該設(shè)置成
import c,{a,b} from ./xxx.js? c對(duì)應(yīng)模塊默認(rèn)導(dǎo)出變量? {a,b}對(duì)應(yīng)export 變量名 需要加上{}?
導(dǎo)入得模塊會(huì)優(yōu)先加載钾虐,哪怕在代碼前有所操作,也會(huì)優(yōu)先執(zhí)行導(dǎo)入文件
import * as all from './xxx.js'導(dǎo)出文件中所有變量
fetch方法
fetch(url)調(diào)用ajax交互返回的是一個(gè)promise對(duì)象,可以直接進(jìn)行then操作笋庄,所以一般會(huì)
fetch(url).then(res=>{res.json()}) 來(lái)獲取返回值