這是一篇專門介紹es6特性的文章,文章寫的非常棒,全文通過代碼示例像我們展示了es6的特性,雖然全英文但是用的都是很基礎的單詞,即使因為不怎么好的同學依然能看懂,我這里將其翻譯過來有2個目的,1是加深自己的記憶,2是做個備份。我這里翻譯是按照我理解的進行翻譯,并非"直譯"。如有不當之處歡迎指正。
箭頭函數(shù) // jquery中
$(".class").bind("click",e=>{
console.log(e);
})
$.ajax({
url:"/api/**/*",
type:"POST",
data:{
},
success:(data, textStatus,jqXHR)=>{
// response data
},
error:err=>{
// http error
},
comp
})
// 在react中
export default ()=>(這是一個最簡單的組件);
export default ()=>{
return hello
}
const persion = {
name:"小明",
arrowGetName:()=>this.name,
regularGetName:function(){
return this.name
},
arrowThis:()=>this,
regularThis:function(){
return this;
}
}
// 執(zhí)行結果,
persion.name; // 輸出:"小明"
persion.arrowGetName(); // 拋出異常,"Cannot read property "name" of undefined"
persion.regularGetName(); // 輸出:"小明"
persion.arrowThis(); // 輸出:undefined
persion.regularThis(); // 輸出:persion對象
// 說明:如果基于執(zhí)行上下文是window,那么輸出結果會有不同
const getName = function(){
let name = "getName func";
setTimeout(()=>{
console.log(this.name);
},1000)
}
// 執(zhí)行結果
getName();
//1s delay "getName func"
classess
在其他語言中class的概念非常明確,特別是那些面向?qū)ο蟮木幊陶Z言中,例如:java;在javascript中class只是基于原型集成的一個高級語法糖,也就是說語法經(jīng)過編譯之后,是通過prototype實現(xiàn)的。
實踐使用class Persion {
static version=13
static getVersion(){
return this.version;
}
constructor(name,age){
this.name = name;
this.age = age;
this.level = 0;
}
updateLevel(newLevel){
this.level = newLevel;
}
}
class Student extends Persion {
constructor(name,age){
super(name,age);
}
get levelT(){
return `${this.level}:from XiaoMing`
}
set levelUpdate(level){
this.level =level;
}
updateLevel(newLevel){
super.updateLevel(newLevel);
}
}
const tom = new Student("hello");
console.log(tom.level); // 0
console.log(tom.levelT); // 0:from XiaoMing
tom.levelUpdate = 2;
console.log(tom.levelT); // 2:from XiaoMing
tom.updateLevel(3);
console.log(tom.levelT); // 3:from XiaoMing
增強的對象字面量
const customProtoObj = {
toString:function(){
return "the customProtoObj To string"
}
}
const handler = ()=>"handler";
const obj = {
// 直接指定重定義原型鏈
__proto__:customProtoObj,
// 屬性賦值的簡約寫法
handler,
// 重定義 對象的toString 方法
toString(){
return `d:${super.toString()}`;
},
// 動態(tài)屬性名稱,這是最大的特性了
["prop_"+(()=>42)()]:42,
}
console.log(obj.handler)
console.log(obj.handler())
console.log(obj.toString())
console.log(obj.prop_42)
這個特性非常給力,特別是動態(tài)屬性,在實踐開發(fā)中真的是屢試不爽
字符串插值表達式,或者叫做字符串模版 // 以前的字符串拼接只能通過加號 完成
let str = "hello";
let str1 = "world"
let strEnd = "end"+str+str1;
// 使用該特性進行重構
let strEndEs6 = `end${str}${str1}`;
// 函數(shù)調(diào)用
const getStr = ()=>`from getStr func:${str}`;
let strEndFun = `from func ${getStr()}`
數(shù)據(jù)解構
這是一個超強的特性,讓我們前端處理后端接口數(shù)據(jù)的時候游刃有余(特別是遇到,那種后端 <..>)
// 1.數(shù)組解構
let [a,,b] = [1,2,3];
console.log(a,b);// 1,3
// 2. 對象解構
const data = ()={name:"tom",age:18};
let {name:a,age} = data();
console.log(a,age);// "tom",18
// 這種對象的解構,如果你用過當前流行的幾個框架:react、vue、ng2,這種解構隨處可見
import {render} from "react-dom"; // 這里的render就是解構出來的
// 3. 在形參中使用
function update({name:x}){
console.log(x);
}
function update2({name}){
console.log(name)
}
update({name:"tom"}); // "tom’
update2({name:"tom2"}); // "tom2"
設置默認值
// 1.形參默認值
function f(x, y=12) {
return x + y;
}
console.log(f(3))
// 2.對象默認值
const p = {name:"123",age:18};
let {name,age,level=123} = p;
console.log(level); // 123
... 語法糖(可以翻譯為數(shù)據(jù)傳播)
// 1. 形參中使用
function f(x,y,z){
return x+y+z;
}
let params = [1,2,3];
f(...params); //他還把數(shù)組的每個元素作為參數(shù)傳遞過去
// 上面的通過es5的方式編寫如下
f.apply(undefined, [1, 2, 3, 4]);
// 2. 數(shù)組中使用
const arr1 = [1,2,"h"];
const arr2 = [2,3,...arr1,4,5];
// 上面通過es5的方式
arr2 = [2,3].concat(arr1,[4,5]);
// 3. 在對象字面量中使用
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
console.log(x); // 1
console.log(y); // 2
console.log(z); // { a: 3, b: 4 }
// Spread properties
let n = { x, y, ...z };
console.log(n); // { x: 1, y: 2, a: 3, b: 4 }
console.log(obj)
Rest形參
這個特性讓我們可以不去現(xiàn)在形參的個數(shù),使我們在編寫功能的時候更加靈活,代碼的擴展性也增強很多
function demo(part1, ...part2) {
return {part1, part2}
}
console.log(demo(1,2,3,4,5,6))
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/90556.html
摘要:字面上是生成器的意思,在里是迭代器生成器,用于生成一個迭代器對象。當執(zhí)行的時候,并不執(zhí)行函數(shù)體,而是返回一個迭代器。迭代器具有方法,每次調(diào)用方法,函數(shù)就執(zhí)行到語句的地方。也有觀點極力反對,認為隱藏了本身原型鏈的語言特性,使其更難理解。 本文為 ES6 系列的第一篇。旨在給新同學一些指引,帶大家走近 ES6 新特性。簡要介紹: 什么是 ES6 它有哪些明星特性 它可以運行在哪些環(huán)境 ...
摘要:原因中,定義的變量沒有塊級作用域,在第一個中循環(huán)后已經(jīng)是,里面的執(zhí)行的時候彈出的就是。 ES6特性介紹(上) ECMAScript(簡稱ECMA、ES),ES6也被稱為ECMAScript 2015JavaScript是ECMAScript的一種,但是目前實現(xiàn)ECMAScript標準的僅JavaScript ES6新的標準,新的語法特征:1、變量/賦值2、函數(shù)3、數(shù)組/json4、字符...
摘要:示例運行函數(shù)彈出彈出函數(shù)接收參數(shù),返回值。其中,返回一個對象,是的返回值,代表函數(shù)是否執(zhí)行完成。 ES6特性介紹(下) ES6新的標準,新的語法特征:1、變量/賦值2、函數(shù)3、數(shù)組/json4、字符串5、面向?qū)ο?、Promise7、generator8、ES7:async/await 《【W(wǎng)eb全棧課程二】ES6特性介紹(上)》見:https://segmentfault.com/a...
摘要:年月,的創(chuàng)造者公司,決定將提交給國際標準化組織,希望這種語言能夠成為國際標準。這表示外層代碼塊不受內(nèi)層代碼塊的影響。也可以運用于函數(shù)及其他文中就簡單介紹這么多,想更加了解新特性的可以自尋查看一下阮一峰的一本入門 ES6新特性 最近在項目中遇到了很多ES6的語法,遇到了不少坑坑洼洼,因此,在這里就簡單介紹一下ES6中的一些新特性 如果想真正的了解ES6和ES5有什么不同,這里推薦看一下...
摘要:的翻譯文檔由的維護很多人說,阮老師已經(jīng)有一本關于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
閱讀 1698·2021-10-14 09:43
閱讀 5867·2021-09-07 10:21
閱讀 1382·2019-08-30 15:56
閱讀 2213·2019-08-30 15:53
閱讀 1300·2019-08-30 15:44
閱讀 2068·2019-08-30 15:44
閱讀 1400·2019-08-29 17:24
閱讀 832·2019-08-29 15:19