ES6二
2020.12.6 22.10
es6==>陣列的擴充套件、函式的擴充套件、類
01陣列的擴充套件
let score=[60,70,40,80,90,59,72,48,33];
var n=score.filter(n=>n<60);//過濾值小於60的元素
console.log(n);//[40,59,48,33]
2.刪除(es5)
splice(引數1,引數2,引數3)
引數1開始的位置(下標) 引數2刪除的個數 引數3插入的元素
let score=[60,70,40,80,90,59,72,48,33];
//從下標為1的元素開始刪除(此元素不刪除),刪除2個元素,插入3個值為100的元素
score.splice(1,2,100,100,100);
console.log(score);//[60,70,100,100,100,80,90,59,72,48,33]
3.替換(es6)
copyWithin(引數1,引數2,引數3)
引數1:替換開始的位置(下標) 引數2:複製開始的位置 引數3:複製結束的位置 含開始不含結束
替換:用複製的元素替換原來的元素
let score=[60,70,40,80,90,59,72,48,33];
console.log(score);
//從下標為2的元素開始替換,從下標為3的元素開始複製,到下標為7的元素結束
var q=score.copyWithin(2,3,7);
//替換位置:40,複製的元素80,90,59,72
console.log(q);//[60,70,80,90,59,72,72,48,33]
原陣列:[60,70,40,80,90,59,72,48,33]
替換後:[60,70,80,90,59,72,72,48,33]
只是替換,複製的元素的數量。複製的如果多餘需要替換的。陣列不會擴充套件,只會替換應有的數量
例如複製4,2,3,5
需要將[100,90,80,70]
中的90和80替換掉。複製4個,替換2個
替換後的陣列:[100,4,2,70]
值可以是負值。從右到左。從-1開始
負值的時候,一定要保證開始的位置,小於結束的位置
// -7,-6,-5,-4,-3,-2,-1
let score=[60,70,40,80,90,59,72,48,33];
console.log(score);
//從下標為-4的元素開始替換,從下標為-5的元素開始複製,到下標為-1的元素結束
var q=score.copyWithin(-4,-5,-1);
//替換位置:59,複製的元素90,59,72,48
console.log(q);//[60,70,40,80,90,90,59,72,48]
原陣列:[60,70,40,80,90,59,72,48,33]
替換後:[60,70,40,80,90,90,59,72,48]
以下寫法不規範 一般不建議正負交叉寫
score.copyWithin(-4,-1,-5)
02.函式的擴充套件
函式的引數
1.預設引數
//es6
function add(a,b=5000){
console.log(`姓名:${a},公積金:${b}`);
}
add('abc');//b不給值就預設5000
//es5
function add(a,b){
// 如果b的值存在,就賦值給b 否則b的值就是5000
b=b||5000;
console.log('姓名:'+a+','+'公積金:'+b);
}
add('abc');
2.引數擴充套件/展開(剩餘引數)
arguments
獲取使用者輸入的所有實參
arguments是類陣列物件
function add(x,y,z){
console.log(arguemnts);//[1,2,3]
}
add(1,2,3);
剩餘引數 ...變數名
用來獲取函式的多餘實參,只能放置在形參結尾,不能放置開始或者中間。
剩餘引數是一個陣列
function add(x,y,z,...argu){//argu只是變數名
console.log(argu);//[4,5,6]
}
add(1,2,3,4,5,6,);
箭頭函式
箭頭函式 去除function,()和{}之間使用=>
//普通函式
function add(x){
console.log(x);
}
//箭頭函式
let add=(x)=>{console.log(x);}
3種簡寫:
1.()
內只有一個引數可以省略()
普通函式function add(x){ console.log(x); }
箭頭函式:let add=x=>{console.log(x);}
2.函式體只有return
語句 可以直接省略{}和return
,此簡寫下若只省略{}
不省略return
會報錯,反之則不會
普通函式:function add(x){ return x>10; }
箭頭函式:let add=x=>x>10;
3.函式體只有一句普通程式碼 可以直接省略{}
普通函式:function add(x){ console.log(x>10); }
箭頭函式:let add=x=>console.log(x>10);
箭頭函式的3個注意點:
1.箭頭函式內部,沒有arguments,只能使用剩餘引數
var fn=(x,y,z,...b)=>{
console.log(b);//[4,5]
console.log(arguments);//報錯,arguments is not defined
}
fn(1,2,3,4,5);
練習:在箭頭函式中,獲取所有實參
方法一:
//由於剩餘引數argu是一個陣列,所以可以用concat連線
let fn=(x,y,z,...argu)=>console.log([x,y,z].concat(argu));
fn(1,2,3,4,5);
方法二:
let fn=(x,y,z,...argu)=>{
var p=[x,y,z];
p.push(argu);
console.log(p);//[,1,2,3,[4,5,6]]
}
fn(1,2,3,4,5,6);
如果要進行排序輸出:
let add=(...argu)=>console.log(argu.sort((a,b)=>a-b));
add(5,4,3,2,1);//[1,2,3,4,5]
2.箭頭函式的this
箭頭函式中的this指向的是定義的時候所在的物件,而不是使用的時候所在的物件
call、apply、bind不能修改箭頭函式中this的指向
var a=()=>{console.log(this)};//window
var stu={
name:'zs'
}
a.call(stu);//普通函式下this會指向stu
a();
3.箭頭函式不可以當做建構函式使用,也就是說,不可以使用new命令,否則會丟擲錯誤。
var Product=(title)=>{ this.title=title; }
var p=new Product('標題');
以上操作會報錯
箭頭函式,使用注意點
1箭頭函式中的this指向的是定義的時候所在的物件,而不是使用的時候所在的物件
2箭頭函式不可以當做建構函式使用,也就是說,不可以使用new命令,否則會丟擲錯誤。
3 箭頭函式內部,沒有arguments,只能使用剩餘引數
03.class類
es6類可以說是建構函式加原型的複合。
es6類的概念,只是"語法糖"。es6實現的關於類的大多數功能都可以通過es5方法實現。
類就是封裝事物
結構:
class 類名{
constructor(){
放置屬性
//也可以在此放置方法
}
放置方法1//(方法之間不加符號,加符號會報錯)
放置方法2
放置方法...
}
class Product{
constructor(title,price){
this.title=title;
this.price=price;
}
buy(){
console.log(`花費${this.price}購買了${this.title}`);
}
}
let p=new Product('手機',3999);
p.buy();
方法放置位置的區別:
class Product{
constructor(title,price){
this.title=title;
this.price=price;
/*書寫在constructor中的方法,
每一次例項物件的時候,都會重新生成一個新的方法。(效率偏低)
針對於每一個物件,執行的方法都是一樣的,這個時候就會造成資源浪費(例項物件的方法)*/
/*this.buy=function(){
console.log(`花費${this.price}購買了${this.title}`);
}*/
}
//放置在此處的方法,相當於放置在了Product.prototype內部(原型的方法)
buy(){
console.log(`花費${this.price}購買了${this.title}`);
}
}
let p=new Product('手機',3999);
let m=new Product('口紅',399);
p.buy();
console.log(p.buy==m.buy);//false,執行方法一樣,儲存地址不一樣
放在constructor
裡的都是自有方法,和constructor
同級的都是繼承來的,如?的buy方法
通過hasOwnProperty
可以判斷是自有還是繼承
console.log(p.hasOwnProperty('title'));//true
console.log(p.hasOwnProperty('buy'));//false
如果是需要每個物件都有的方法/屬性,如商品的顏色等,放在constructor
中
共用的方法,如購買商品,加入購物車,放在和constructor
同級的地方
判斷某個例項物件是否屬於某個建構函式/類
例項物件 instanceof 建構函式/類
如 p instanceof Product
console.log(p.constructor==Product);//例項物件通過constructor和建構函式相關聯
console.log(p.__proto__==Product.prototype);//例項物件的__proto__指向建構函式的prototype
console.log(Product.prototype.isPrototypeOf(p));//建構函式的prototype存在於例項物件的原型鏈中
console.log(Object.prototype.isPrototypeOf(p));//最頂層obj的prototype存在於例項物件的原型鏈中
藍線是原型鏈
原型和原型鏈圖示參考自:連結
2020.12.7 02:55
相關文章
- ES6快速入門(二)
- ES6 學習筆記二筆記
- ES6新增API:Array篇(二)API
- ES6新增API:String篇(二)API
- ES6語法(二) 函式函式
- es6筆記應用 二筆記
- 重學ES6基礎語法(二)
- let & const —— ES6基礎總結(二)
- ES6深入學習(二)關於函式函式
- webpack4 系列教程(二): 編譯 ES6Web編譯
- 每天學習一點ES6(二)let 和 const
- ES6學習筆記(二)【數值,陣列】筆記陣列
- H5 Audio ES6版 系列教程之二H5
- [譯]ES6入門(第二部分)
- [ 造輪子 ] 手動封裝 AJAX (二) —— ES6 版封裝
- 日常好奇-看看ES6的類如何實現的[二]
- 【系統學習ES6】第二節:解構賦值賦值
- 【ES6基礎】Symbol介紹:獨一無二的值Symbol
- ES6學習筆記二(變數結構賦值)筆記變數賦值
- web前端技巧-ES6新特性與重點知識彙總(二)Web前端
- ES6學習筆記--es6簡介筆記
- ES6 Array
- es6 symbolSymbol
- ES6 - 物件物件
- ES6 - PromisePromise
- ES6:Reflect
- 初探ES6
- es6—PromisePromise
- ES6 知識整理一(es6快速入門)
- React16JestES6ClassMocks(使用ES6語法類的模擬)例項二ReactSSMMock
- es6 class解析
- ES6 新知識
- es6筆記筆記
- ES6——Promise 物件Promise物件
- [ES6] 基礎
- ES6 物件概述物件
- ES6 promise理解Promise
- ES6操作字串字串