ES6 ออกมาแล้ว การสนับสนุนเบราว์เซอร์นั้นดีจริง ๆ และหากยังไม่เพียงพอสำหรับคุณ ก็ยังมี Babel อยู่เสมอ ดังนั้นมาเร่งความเร็วด้วยฟีเจอร์ใหม่ที่สำคัญและยอดเยี่ยมที่สุดกันดีกว่า
ให้มี Const
ขอบเขตใน JavaScript เป็นสิ่งที่คนส่วนใหญ่ไม่คุ้นเคย เนื่องจากเรามีสิ่งที่เรียกว่า "โฮสติ้งแบบแปรผัน" ซึ่งจะดึงตัวแปรทั้งหมดออกมาและกำหนดไว้ที่ด้านบนสุดของขอบเขต ขอบเขตของพวกเขาเป็นทั้งระดับโลกหรือฟังก์ชั่นโดยรอบแรก ตัวอย่างคลาสสิกที่นี่คือ for for loop
function foo() { for(var i = 0; i < 10; i++) { console.log(i) // 0 1 2 3 4 5 6 7 8 9 } console.log(i) //10 }
นั่นเป็นเพราะว่าสิ่งที่เกิดขึ้นจริงคือ var i
ถูกยกให้อยู่ในขอบเขตของมัน
function foo() { var i for(i = 0; i < 10; i++) { console.log(i) // 0 1 2 3 4 5 6 7 8 9 } console.log(i) //10 }
การรู้สิ่งนี้ก็สมเหตุสมผลอย่างยิ่ง แต่ตอนนี้เราได้รับคำหลักใหม่ที่ยอดเยี่ยมซึ่งจริงๆ แล้วกำหนดขอบเขตไว้ที่ บล็อก ที่อยู่รอบๆ
let เป็น var ใหม่ที่มีประสิทธิภาพ มันมีอยู่ในบล็อกที่เกี่ยวข้องเท่านั้น
function foo() { for(let i = 0; i < 9; i++) { console.log(i) // 0 1 2 3 4 5 6 7 8 9 } console.log(i) //undefined }
const กำหนดค่าคงที่ นั่นคือไม่สามารถมอบหมายใหม่ได้ และดังนั้นจึงไม่สามารถใช้ใน for loop ซึ่งตัวแปรตัววนซ้ำได้รับการอัพเดตอย่างต่อเนื่อง หากคุณกำหนดค่าคงที่ที่เป็น Object คุณสามารถแก้ไขและกำหนดคุณสมบัติของมันได้ แต่ไม่สามารถกำหนดตัวแปรให้เป็นอย่างอื่นได้
const obj = { name: ‘HoverBaum’ } obj.name = ‘Tester’ //works obj.awesome = true //also okay obj = [] //NOPE, this is an error
ฟังก์ชันลูกศร
คุณจำคีย์เวิร์ด `function` แบบเก่าที่ดีได้ไหม
function foo() { return ‘bar’ }
เด็กๆ เจ๋งๆ พบวิธีการทำเช่นนี้โดยใช้โค้ดน้อยลง ดีมากสำหรับผู้ที่เขียนบล็อกและนำเสนอผลงาน เราสามารถบีบตรรกะให้มากขึ้นโดยใช้พื้นที่น้อยลงโดยใช้ไวยากรณ์ที่ทำให้ผู้อ่านสับสน//เทียบเท่ากับ ES6
const foo = () => { return ‘bar’ } //And even shorter because returns are implied const foo = () => ‘bar’
แต่มันมีประโยชน์มากเมื่อคุณต้องการส่งฟังก์ชันไปยังบางสิ่ง เช่นเดียวกับการทำแผนที่บนอาร์เรย์ และด้วย Functional Programming (ไม่ว่าจะเป็นอะไรก็ตาม) ที่เป็นทุกวัยในตอนนี้ คุณจะเห็นผู้คนทำเช่นนี้มากขึ้นเรื่อยๆ
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] const doubled = arr.map(number => {return number * 2}) // [2, 4, 6, 8, 10, 12, 14, 15, 19, 20] //And again all the sugar to leave out things. const awesomeDouble = arr.map(number => number * 2) // [2, 4, 6, 8, 10, 12, 14, 15, 19, 20] //That implicit return even works for Objects. const wrapped = arra.map(number => ({num: number})) //[{num: 1}, {num: 2}, {num: 3}, {num: 4}, …]
คุณสังเกตไหมว่าคุณต้องล้อม Objects ด้วย `()` เพื่อให้มันทำงานกับผลตอบแทนโดยนัยได้อย่างไร รหัสที่สอดคล้องกันมากที่เราเขียนที่นี่ ดังนั้นคุณอาจต้องการเก็บรูปแบบ { return ‘bar’ }
ไว้เพื่อทำให้โค้ดของคุณสอดคล้องกันและไม่ทำให้ตัวเองสับสน เพราะเชื่อฉันสิว่าจะทำให้คุณสับสน และอย่าทะเลาะกันเรื่องโค้ดน้อยกับคน รวมถึงผู้เขียนก็อ่านได้สบายๆ เพราะฉันชอบอันหลังและนี่คือบล็อกของฉัน
ฉันพูดถึงแล้วว่า Arrow Functions ยังคงรักษาขอบเขตปัจจุบันไว้หรือไม่ ดังนั้น `สิ่งนี้` ภายในฟังก์ชันลูกศรจะเหมือนกับที่อยู่ภายนอก เป็นเพียงสิ่งที่ต้องจำไว้
การทำลายล้าง
ตอนนี้เราสามารถนำ Objects ออกจากที่อื่นได้แล้ว ส่วนใหญ่เราใช้สิ่งนี้สำหรับการนำเข้าและส่งออก (ถัดไปในบล็อกโพสต์นี้เท่านั้น) แต่คุณสามารถใช้มันบนออบเจ็กต์หรือรับพารามิเตอร์ที่มีชื่อสำหรับฟังก์ชันต่างๆ
let {a, b} = { a: 1, b: 2 } console.log(a) // 1 function foo ({greeting, name}) { console.log(greeting + ‘ ‘ + name) } foo({name: ‘HoverBaum’, greeting: ‘Hello’})
โมดูล
Victory Dance ที่นี่ พร้อมเฉลิมฉลองครั้งใหญ่! ในที่สุดเราก็ได้รับโมดูลดั้งเดิม ตอนนี้ถ้าเพียงเราทุกคนสามารถใช้มันได้และพวกมันก็เข้ากันได้กับโหนด แต่พวกเขาก็สุดยอดมาก ตอนนี้เราสามารถ `นำเข้า` สิ่งต่าง ๆ จากโมดูลที่ `ส่งออก` ได้
//app.js //import the default export from logger import log from ‘./logger’ //only import a from letters import { a } from ‘./letters’ log(a) // 1 //logger.js export default const log = (msg) => { console.log(msg) } //letters.js export const a = 1 export const b = 2
สตริงเทมเพลต
นี่เป็นอีกหนึ่ง ”โอ้พระเจ้า ทำไมเราไม่เคยมีสิ่งนี้มาก่อน ????!?” เพราะเราทุกคนจำการสร้าง String โดยมีตัวแปรอยู่ในนั้นได้ ตอนนี้เราสามารถทำได้โดยใช้ `และ ${}
function greet(greeting, name) { console.log(`${greeting} ${name}, nice to see you.`) }
หากสิ่งนี้ไม่ทำให้คุณตื่นเต้นอย่างจริงจัง… ให้กลับไปสร้างเว็บไซต์สักสองสามสิบแห่งโดยที่ไม่มีมัน!
พารามิเตอร์เริ่มต้น
อ่านประโยคแรกจากย่อหน้าสุดท้ายอีกครั้ง ^^
ด้วย พารามิเตอร์เริ่มต้น เราสามารถกำหนดได้อย่างง่ายดายว่าพารามิเตอร์ควรเป็นอย่างไรหากไม่ได้ระบุ
//Old way function greet(greeting, name) { if(!greeting) { greeting = ‘Hello’ } if(!name) { name = “Friend” } console.log(`${greeting} ${name}.`) } //ES6 Default Paramteres function greeti(greeting = ‘Hello’, name = ‘Friend’) { console.log(`${greeting} ${name}.`) }
เราบันทึกโค้ดไว้ทั้งหมดหกบรรทัด! นั่นไม่น่าทึ่งเหรอ?
วัตถุมอบหมาย
หากคุณอ่าน "โพสต์ตอบกลับ" ของฉัน คุณคงได้เห็นสิ่งนี้มามากแล้ว การใช้ Object.assign
ช่วยให้เราสามารถสร้างออบเจ็กต์ใหม่และส่งผ่านไปยังออบเจ็กต์อื่นได้ อะไร ตัวอย่าง:
const obj = { a: 1, b: 2 } const newObj = Object.assign({}, obj, { b: 13 }) /* newObj == { a: 1, b: 13 } */
สิ่งสำคัญที่นี่คือเราสร้าง Object ใหม่ทั้งหมด คุณเรียกใช้ฟังก์ชันเช่น Object.assign(target, …sources)
โดยมอบ Object ให้กับมัน จากนั้น Objects ที่ควรรวมค่าเข้ากับสิ่งนั้น
สิ่งนี้มีประโยชน์ในการสร้างที่เก็บข้อมูลที่ไม่เปลี่ยนรูปโดยที่คุณไม่ต้องการแก้ไขข้อมูลหรือสถานะที่เก็บไว้ แต่สร้างที่เก็บข้อมูลใหม่ จึงทำให้คุณสามารถจำอันเก่าแล้วกระโดดกลับไปหามันได้
ชวเลขทรัพย์สิน
อีกคุณสมบัติในการบันทึกบรรทัดของโค้ดและอาจทำให้ผู้คนสับสนก็คือ Property Shorthands หากคุณต้องการส่งผ่าน ชื่อ เข้าไปและวัตถุเป็นคุณสมบัติวัตถุ object.name
คุณสามารถวางไว้ตรงนั้นได้
const name = ‘HoverBaum’ //old const nameObj = { name: name } //ES6 const es6Obj = { name }
อ่านเพิ่มเติม
ต่อไปนี้คือลิงก์บางส่วนไปยังข้อมูลอ้างอิงที่ดีและการอ่านเพิ่มเติม
- ข้อมูลอ้างอิงสำหรับคุณสมบัติ
- ซีรีส์ ES6 โดย FunFunFunction
เผยแพร่ครั้งแรกที่ hoverbaum.net เมื่อวันที่ 25 กรกฎาคม 2016