{}const=>[]async()letfn</>var
開発JS

ES6+機能:開発者向けの最新JavaScript

最新のJavaScript機能の完全ガイド:アロー関数、デコンストラクト、約束、非同期/待機、クラス、その他のES6 +機能。コードをよりクリーンで効率的にするための最新のJavaScriptの主要ツールを学びます。

К

Kodik

著者

4分で読める

LetとConst:変数を宣言する新しい方法

ES6 以前は、変数を宣言するために var キーワードのみが使用されていましたが、これにはいくつかの問題がありました。最新のJavaScriptは、ブロックスコープを持つletconstを提供します。

// var - 機能スコープ
function oldWay() {
    if (true) {
        var x = 10;
    }
    console.log(x); // 10 - 変数が利用可能
}

// let - ブロックスコープ
function newWay() {
    if (true) {
        let y = 10;
    }
    // console.log(y); // ReferenceError
}

// const - 不変の参照用
const API_URL = 'https://api.example.com';
const user = { name: 'Alexey' };
user.name = 'Ivan'; // 動作中 - 変更可能なオブジェクト
// user = {}; // TypeError - 再割り当てできません

再割り当てを必要としないすべての変数に対して、デフォルトで const を使用します。これにより、コードの予測性が向上し、偶発的な変更から保護されます。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

条件付き関数:簡潔さとthis

矢印関数は、よりコンパクトな構文を提供し、thisのコンテキストの問題を解決します。

// クラシック機能
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(function(n) {
    return n * 2;
});

// 矢印機能
const doubledArrow = numbers.map(n => n * 2);

// 複数のパラメータ
const sum = (a, b) => a + b;

// 複数の式を持つ関数の本体
const processUser = user => {
    const name = user.name.toUpperCase();
    return `Hi ${name}!`;
};

矢印関数の重要な特徴は、それらが独自のコンテキスト this を作成するのではなく、周囲の領域から継承することです。

class Timer {
    constructor() {
        this.seconds = 0;
    }
    
    // 通常の関数では、.bind (this)が必要になります
    start() {
        setInterval(() => {
            this.seconds++; // thisはTimerのインスタンスを指します
            console.log(this.seconds);
        }, 1000);
    }
}

デストラクチャリゼーション:オブジェクトと配列からのデータの抽出

デストラクチャリゼーションを使用すると、配列やオブジェクトからの値を個別の変数にエレガントに抽出できます。

// オブジェクトのデコンストラクト
const user = {
    name: 'Alexey',
    age: 30,
    email: 'alexey@example.com'
};

const { name, age } = user;
console.log(name); // アレクセイ

// 変数の名前を変更する
const { name: userName, age: userAge } = user;

// デフォルト値
const { role = 'user' } = user;

// 配列の解体
const colors = ['red', 'green', 'blue'];
const [primary, secondary] = colors;

// 要素をスキップ
const [first, , third] = colors;

// Rest オペレーター
const [head, ...tail] = colors;
console.log(tail); // ['green', 'blue']

デコンストラクトは、特に関数のパラメータで便利です。

function displayUser({ name, age, email = 'not specified' }) {
    console.log(`${name}, ${age} years old, email: ${email}`);
}

displayUser(user);

SpreadとRest演算子:コレクションの操作

スプレッド演算子とレスト演算子は同じ構文 ... を使用しますが、逆の操作を実行します。

// Spread - 配列またはオブジェクトを展開します
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const combined = [...arr1, ...arr2]; // [1, 2, 3, 4, 5, 6]

// 配列のコピー
const original = [1, 2, 3];
const copy = [...original];

// オブジェクトのスプレッド
const defaults = { theme: 'dark', language: 'ru' };
const userSettings = { language: 'en', fontSize: 14 };
const settings = { ...defaults, ...userSettings };
// { theme: 'dark', language: 'en', fontSize: 14 }

// Rest -残りの要素を収集します
function sum(...numbers) {
    return numbers.reduce((total, n) => total + n, 0);
}

sum(1, 2, 3, 4); // 10

テンプレート行:便利な補間

テンプレートリテラルは逆引用符を使用し、式を文字列に埋め込むことができます。

const name = 'Alexey';
const age = 30;

// 古い方法
const greeting = 'Hi, ' + name + '! To you ' + age + ' years.';

// テンプレート行
const modernGreeting = `Hi ${name}! You are ${age} years old.`;

// 複数行の文字列
const html = `
    <div class="card">
        <h2>${name}</h2>
        <p>Age: ${age}</p>
    </div>
`;

// テンプレートの表現
const price = 100;
const message = `Discounted price: ${price * 0.9} rub.`;

Promisesとasync/await:痛みのない非同期

Promisesは非同期コードの操作を大幅に簡素化し、async/awaitはそれを同期コードのように見えるようにしました。

// プロミス
function fetchUser(id) {
    return fetch(`/api/users/${id}`)
        .then(response => response.json())
        .then(data => data.user)
        .catch(error => console.error('Error:', error));
}

// Async/await - より読みやすいコード
async function fetchUserAsync(id) {
    try {
        const response = await fetch(`/api/users/${id}`);
        const data = await response.json();
        return data.user;
    } catch (error) {
        console.error('Error:', error);
    }
}

// 並列実行
async function fetchMultipleUsers(ids) {
    const promises = ids.map(id => fetchUserAsync(id));
    const users = await Promise.all(promises);
    return users;
}

モジュール:コードの編成

ES6モジュールを使用すると、コードを論理部分に分割し、依存関係を管理できます。

// math.js - エクスポート
export const PI = 3.14159;

export function sum(a, b) {
    return a + b;
}

export class Calculator {
    multiply(a, b) {
        return a * b;
    }
}

// main.js - インポート
import { PI, sum, Calculator } from './math.js';

// モジュール全体のインポート
import * as MathUtils from './math.js';

// デフォルトのエクスポート
// user.js
export default class User {
    constructor(name) {
        this.name = name;
    }
}

// デフォルトのエクスポートをインポート
import User from './user.js';

クラス:オブジェクト指向プログラミング

ES6 では、クラス形式のプロトタイプを扱うための構文の糖分が追加されました。

class Animal {
    constructor(name) {
        this.name = name;
    }
    
    speak() {
        console.log(`${this.name} makes a sound`);
    }
}

class Dog extends Animal {
    constructor(name, breed) {
        super(name); // 親デザイナーの呼び出し
        this.breed = breed;
    }
    
    speak() {
        console.log(`${this.name} is barking`);
    }
    
    // 静的メソッド
    static info() {
        return 'Dogs - pets';
    }
}

const dog = new Dog('Bobik', 'Labrador');
dog.speak(); // ボビクが吠える

配列メソッド:マップ、フィルター、削減など

最新の配列メソッドにより、データの操作がより宣言的になります。

const users = [
    { name: 'Alexey', age: 30, active: true },
    { name: 'Maria', age: 25, active: false },
    { name: 'Ivan', age: 35, active: true }
];

// map - 要素の変換
const names = users.map(user => user.name);

// filter - フィルタリング
const activeUsers = users.filter(user => user.active);

// reduce - 集約
const totalAge = users.reduce((sum, user) => sum + user.age, 0);

// find - 最初の要素を検索する
const alex = users.find(user => user.name === 'Alexey');

// some - 少なくとも 1 つの要素の条件をチェックする
const hasActive = users.some(user => user.active);

// every - すべての要素の条件をチェックする
const allActive = users.every(user => user.active);

// メソッドチェーン
const result = users
    .filter(user => user.active)
    .map(user => user.name)
    .sort();

オプションのチェーンとヌリッシュコアレスシング

これらの演算子は、潜在的に不確実な値の処理を簡素化します。

const user = {
    name: 'Alexey',
    address: {
        city: 'Moscow'
    }
};

// オプションのチェーン(?。) - 安全なアクセス
const street = user.address?.street; // 未定義、エラーなし
const zip = user.address?.zip?.code; // undefined

// メソッド
const result = user.getData?.(); // メソッドがない場合は未定義

// Nullish coalescing (??)-デフォルト値
const port = process.env.PORT ?? 3000;

// ||との違い
const count = 0;
console.log(count || 10); // 10(0は偽と見なされます)
console.log(count ?? 10); // 0(null/undefined のみで動作します)

結論

現代の JavaScript には、クリーンで効率的なコードを書くための多くのツールが用意されています。ES6 以降の機能は、新しい構文を追加するだけでなく、JavaScript でのプログラミングへのアプローチを変更し、より表現力豊かで信頼性の高いものにします。

これらの機能をプロジェクトに徐々に適用し始めます。時間が経つにつれて、それらの多くはコーディングスタイルの自然な一部になります。最新の JavaScript は、開発者に新しい視野をもたらし、アプリケーションの作成プロセスをより生産的で楽しいものにします。

コディック — 初心者向けの開発者教育プラットフォーム。Python、JavaScript、HTML、CSS、その他の最新テクノロジーに関するわかりやすいコースと記事を作成しています。

参加する 私たちのコミュニティ!

チャンネル登録をお願いします TelegramチャンネルKodik、公開場所:

  • プログラミングに関する新しい記事とチュートリアル

  • 開発者のためのヒント

  • 複雑なテーマをシンプルな言葉で解説

  • IT業界の最新ニュース

成長する コディックと一緒に!🚀

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要