ES6
Lembar contekan referensi singkat tentang apa yang baru dalam JavaScript untuk ES2015, ES2016, ES2017, ES2018, dan seterusnya
Block-scoped
Biarkan
fungsi fn () {
let x = 0
if (true) {
let x = 1 // hanya di dalam `if` ini
}
}
Const
const a = 1
let adalah var yang baru. Konstanta (const) bekerja seperti let, tetapi tidak dapat dipindahkan.
Lihat: Let dan const
Template String
Interpolasi
const message = `Halo ${nama}`
String multi-baris
const str = `
halo
dunia
`
Templat dan string multiline. Lihat: string templat
Literal biner dan oktal
let bin = 0b1010010
let oct = 0o755
Lihat: Biner dan Oktal Literal
Operator Eksponensial
const byte = 2 **8
Sama seperti: Math.pow(2, 8)
Penambahan pustaka baru
Metode string baru
"halo".repeat(3)
"halo". includes("akan")
"halo". startsWith("he")
"halo".padStart(8) // "halo"
"halo".padEnd(8) // "halo"
"halo".padEnd(8, '!') // halo!!!
"\u1E9B\u0323".normalize("NFC")
Metode Nomor Baru
Number.EPSILON
Number.isInteger(Infinity) // false
Number.isNaN("NaN") // false
Metode Matematika Baru
Math.acosh(3) // 1.762747174039086
Math.hypot(3, 4) // 5
Math.imul(Math.pow(2, 32) -1, Math.pow(2, 32) -2) // 2
Metode-metode Larik Baru
//mengembalikan larik nyata
Array.from(document.querySelectorAll("*"))
//mirip dengan new Array(...), tetapi tanpa perilaku argumen tunggal khusus
Array.of(1, 2, 3)
Lihat: [Penambahan pustaka baru] (https://babeljs.io/learn-es2015/#math--number--string--object-apis)
jenis
class Lingkaran extends Bentuk {
Konstruktor
konstruktor (radius) {
this.radius = radius
}
metode
getArea () {
return Math.PI * 2 * this.radius
}
Panggil metode superclass
expand(n) {
return super.expand(n) *Math.PI
}
Metode statis
static createFromDiameter(diameter) {
return new Circle(diameter /2)
}
Gula sintaksis untuk prototipe. Lihat: classes
Kelas pribadi
Kolom default javascript adalah publik (public), jika Anda perlu menunjukkan privat, Anda dapat menggunakan (#)
class Anjing {
#nama
konstruktor (nama) {
this.#nama = nama;
}
printNama() {
// Hanya field pribadi yang bisa dipanggil di dalam kelas
console.log(`Nama Anda adalah ${this.#nama}`)
}
}
const dog = new Dog("dempul")
//console.log(this.#nama)
//Pengenal pribadi tidak diperbolehkan di luar badan kelas.
dog.printName()
Kelas privat statis
class ClassWithPrivate {
static #privateStaticField;
static #privateStaticFieldWithInitializer = 42;
static #privateStaticMethod() {
// ...
}
}
Janji
membuat komitmen
new Promise((resolve, reject) => {
if (ok) { resolve(hasil) }
else { tolak (error) }
})
untuk pemrograman asinkron. Lihat: Janji-janji
Menggunakan Janji
promise
.then((hasil) => { --- })
.catch((error) => { --- })
Menggunakan Janji dalam akhirnya
promise
.then((hasil) => { --- })
.catch((error) => { --- })
.finally(() => {
/*logika tidak bergantung pada keberhasilan/kesalahan */
})
Handler dipanggil ketika janji dipenuhi atau ditolak
Fungsi janji
Promise.all(---)
Promise.race(---)
Promise.reject(---)
Promise.resolve(---)
Async-tunggu
fungsi asinkronisasi run () {
const user = await getUser()
const tweets = await getTweets(user)
return [user, tweets]
}
Fungsi async adalah cara lain untuk menggunakan fungsi.
Lihat: Fungsi Asinkronisasi
Penghancuran
Penugasan destrukturisasi
Array
const [first, last] = ['Nikola', 'Tesla']
Objek
let {judul, penulis} = {
title: 'Ulat Sutra',
penulis: 'R. Galbraith'
}
Mendukung pencocokan larik dan objek. Lihat: Destructuring
Default
const nilai = [22, 33]
const [math = 50, sci = 50, arts = 50] = nilai
//Result:
//math === 22, sci === 33, arts === 50
Nilai default dapat ditetapkan saat mendestrukturisasi larik atau objek
Parameter fungsi
function menyapa({ nama, salam }) {
console.log(`${salam}, ${nama}!`)
}
menyapa ({ nama: 'Larry', sapaan: 'Ahoy' })
Destrukturisasi objek dan larik juga dapat dilakukan dalam parameter fungsi
Default
function menyapa({ nama = 'Rauno' } = {}) {
console.log(`Hai ${nama}!`);
}
greet() // Hai Rauno!
greet({ name: 'Larry' }) // Hai Larry!
Menetapkan ulang kunci
function printCoordinates({ left: x, top: y }) {
console.log(`x: ${x}, y: ${y}`)
}
printCoordinates({ left: 25, top: 90 })
Contoh ini menetapkan x ke nilai kunci kiri
Perulangan
for (let {judul, artis} dari lagu) {
---
}
Ekspresi penugasan juga berfungsi dalam perulangan
Dekonstruksi Objek
const { id, ... detail } = lagu;
Gunakan operator rest(...) untuk mengekstrak beberapa kunci satu per satu dan kunci lainnya di dalam objek
Operator Penyebaran Penyebaran
Ekstensi Objek
dengan ekstensi objek
const options = {
... default,
visible: true
}
Tidak ada ekstensi objek
const options = Object.assign(
{}, defaults,
{ visible: true })
Operator penyebaran objek memungkinkan Anda membuat objek baru dari objek lain. Lihat: Penyebaran Objek
Perluasan Larik
dengan ekstensi larik
const users = [
... admin,
... editor,
'rstacruz'
]
Tidak ada ekspansi larik
const users = admins
.concat(editor)
.concat([ 'rstacruz' ])
Operator spread memungkinkan Anda untuk membuat larik baru dengan cara yang sama. Lihat: Operator penyebaran
Fungsi
Parameter fungsi
Parameter default
function menyapa (nama = 'Jerry') {
return `Halo ${nama}`
}
Parameter istirahat
function fn(x, ... y) {
// y adalah sebuah array
return x * y.length
}
Ekstensi
fn(...[1, 2, 3])
//sama seperti fn(1, 2, 3)
Default (bawaan), istirahat, penyebaran (ekstensi). Lihat: parameter fungsi
Fungsi panah
Fungsi panah
setTimeout(() => {
---
})
dengan parameter
readFile('text.txt', (err, data) => {
...
})
pengembalian implisit
arr.map(n => n*2)
//tidak ada kurung kurawal = pengembalian implisit
//Sama seperti: arr.map(function (n) { return n*2 })
arr.map(n => ({
hasil: n*2
}))
//Pengembalian objek secara implisit membutuhkan tanda kurung di sekitar objek
Seperti sebuah fungsi, tetapi mempertahankan ini.
Lihat: Fungsi Panah
Nilai default pengaturan parameter
function log(x, y = 'World') {
console.log(x, y);
}
log('Halo') // Halo Dunia
log('Halo', 'China') // Halo China
log('Halo', '') // Halo
Digunakan bersama dengan destrukturisasi penugasan default
function foo({x, y = 5} = {}) {
console.log(x, y);
}
foo() // tidak terdefinisi 5
atribut nama
function foo() {}
foo.name // "foo"
Properti panjang ### panjang
fungsi foo(a, b){}
foo.length // 2
Objek
Sintaksis Singkatan
module.exports = { halo, selamat tinggal }
sama di bawah ini:
module.exports = {
halo: halo, selamat tinggal: selamat tinggal
}
Lihat: Objek Literal yang Disempurnakan
Metode ###
const App = {
start () {
console.log('running')
}
}
//Sama seperti: App = { start: function () {---} }
Lihat: Literal Objek yang Disempurnakan
Pengambil dan pengatur
const App = {
get closed () {
return this.status === 'closed'
},
set closed (nilai) {
this.status = nilai ? 'tertutup' : 'terbuka'
}
}
Lihat: Objek Literal yang Disempurnakan
Nama properti yang dihitung
let event = 'klik'
let handlers = {
[`on${event}`]: true
}
//Sama seperti: handlers = { 'onclick': true }
Lihat: Object Literals yang Disempurnakan
Ekstrak nilai
const fatherJS = { umur: 57, nama: "Zhang San" }
Object.values(fatherJS)
//[57, "Zhang San"]
Object.entries(fatherJS)
//[["umur", 57], ["nama", "Zhang San"]]
Modul modul
Impor impor
import 'helpers'
//aka: require('---')
import Express dari 'express'
//aka: const Express = require('---').default || require('---')
import { indent } from 'helpers'
//aka: const indent = require('---').indent
import * as Helpers from 'helpers'
//aka: const Helpers = require('---')
import { indentSpaces as indent } from 'helpers'
//aka: const indent = require('---').indentSpaces
import adalah require() yang baru.
Lihat: [Impor modul] (https://babeljs.io/learn-es2015/#modules)
Ekspor ekspor
ekspor fungsi default () { --- }
//aka: module.exports.default = ---
fungsi ekspor mymethod () { --- }
//aka: module.exports.mymethod = ---
export const pi = 3.14159
//aka: module.exports.pi = ---
const firstName = 'Michael';
const lastName = 'Jackson';
const year = 1958;
export { nama depan, nama belakang, tahun };
ekspor * dari "lib/math";
export adalah module.exports yang baru.
Lihat: Module exports
Penggantian nama kata kunci as
import {
nama_akhir sebagai nama keluarga // import ganti nama
} from './profile.js';
function v1() { ... }
function v2() { ... }
mengekspor { v1 sebagai default };
//Setara dengan mengekspor default v1;
ekspor {
v1 sebagai streamV1, // ekspor ganti nama
v2 sebagai streamV2, // ekspor ganti nama
v2 as streamLatestVersion // ekspor ganti nama
};
Memuat modul secara dinamis
button.addEventListener('click', event => {
import('./dialogBox.js')
.then(dialogBox => {
dialogBox. open();
})
.catch(error => {
/*Penanganan kesalahan */
})
});
[Proposal ES2020] (https://github.com/tc39/proposal-dynamic-import) memperkenalkan fungsi import()
import() memungkinkan jalur modul dibuat secara dinamis
const main = document.querySelector('main')
import(`./modules/${someVariable}.js`)
.then(module => {
module.loadPageInto(main);
})
.catch(err => {
main.textContent = err.message;
});
import.meta
ES2020 Menambahkan properti meta import.meta ke perintah import, yang mengembalikan informasi meta dari modul saat ini
URL baru ('data.txt', import.meta.url)
Di lingkungan Node.js, import.meta.url selalu mengembalikan jalur lokal, yaitu string protokol file:URL, seperti file:/// home/user/foo.js
Mengimpor Pernyataan
impor statis
import json from "./package.json" assert {type: "json"}
//Impor semua objek dalam berkas json
Impor Dinamis
const json =
menunggu impor ("./package.json", { assert: { type: "json" } })
Generator
Fungsi generator
function * idMaker () {
let id = 0
while (true) { hasilkan id++ }
}
let gen = idMaker()
gen.next().value // → 0
gen.next().value // → 1
gen.next().value // → 2
itu rumit. Lihat: Generator
For..of + iterator
let fibonacci = {
[Symbol.iterator]() {
let pre = 0, cur = 1;
return {
next() {
[pre, cur] = [cur, pre + cur];
return { done: false, value: cur }
}
}
}
}
for (var n of fibonacci) {
// memotong urutan pada 1000
if (n > 1000) break;
console.log(n);
}
Untuk mengulang generator dan larik. Lihat: Untuk..iterasi
Hubungan dengan antarmuka Iterator
var gen = {};
gen [Symbol.iterator] = function*() {
menghasilkan 1
hasil 2
hasil 3
};
[... gen] // => [1, 2, 3]
Fungsi Generator ditetapkan ke properti Symbol.iterator, sehingga objek gen memiliki antarmuka Iterator, yang dapat dilalui oleh operator ...
Properti Symbol.iterator
function*gen() { /*beberapa kode */}
var g = gen();
g[Symbol.iterator]() === g // true
gen adalah fungsi Generator, memanggilnya akan menghasilkan objek penjelajah g. Properti Symbol.iterator, yang juga merupakan fungsi penghasil objek iterator, akan dikembalikan setelah eksekusi
lihat juga
- [Belajar ES2015] (https://babeljs.io/docs/en/learn/) _(babeljs.io)
- Ikhtisar Fitur ECMAScript 6 (github.com)