< 戻る

その他のパーツ

その他のパーツを、1つのグループとして以下に示す。

目次
  1. ,(comma) 演算子
  2. typeof 演算子
  3. void 演算子
  4. ?.(Optional chaining) 演算子
  5. labeled ステートメント
  6. import
  7. export

1. ,(comma) 演算子

カンマ演算子 (,) は、それぞれの演算対象を(左から右に)評価し、最後のオペランドの値を返します。これにより、複数の式が評価される複合式を作成することができ、複合式の最終値はそのメンバー式の一番右端の値となります。これは、for ループに複数の引数を提供する場合によく使用されます。

let x = 1;

x = (x++, x);

console.log(x);
// expected output: 2

x = (2, 3);

console.log(x);
// expected output: 3

2. typeof 演算子

typeof 演算子は、未評価のオペランドの型を示す文字列を返します。

console.log(typeof 42);
// expected output: "number"

console.log(typeof 'blubber');
// expected output: "string"

console.log(typeof true);
// expected output: "boolean"

console.log(typeof undeclaredVariable);
// expected output: "undefined"

3. void 演算子

void 演算子は与えられた式 (expression) を評価し、undefined を返します。

const output = void 1;
console.log(output);
// expected output: undefined

void console.log('expression evaluated');
// expected output: "expression evaluated"

void function iife() {
  console.log('iife is executed');
}();
// expected output: iife is executed

void function test() {
  console.log('test function executed');
};
try {
  test();
} catch (e) {
  console.log('test function is not defined');
  // expected output: "test function is not defined"
}

4. ?.(Optional chaining) 演算子

オプショナルチェーン (optional chaining) 演算子 (?.) は、接続されたオブジェクトチェーンの深くに位置するプロパティの値を、チェーン内の各参照が正しいかどうかを明示的に確認せずに読み込むことを可能にします。

?. 演算子の機能は . チェーン演算子と似ていますが、参照が nullish (null または undefined) の場合にエラーとなるのではなく、式が短絡され undefined が返されるところが異なります。関数呼び出しで使用すると、与えられた関数が存在しない場合、 undefined を返します。

これは、参照が失われた可能性のある連結されたプロパティにアクセスする時、結果的に短く単純な式になります。また、必要なプロパティの存在が保証されていない場合にオブジェクトのコンテンツを探索するのにも役立ちます。

オプショナルチェーンは、宣言されていないルートオブジェクトでは使用できませんが、未定義のルートオブジェクトで使用できます。

const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  }
};

const dogName = adventurer.dog?.name;
console.log(dogName);
// expected output: undefined

console.log(adventurer.someNonExistentMethod?.());
// expected output: undefined

5. labeled ステートメント

参考:label - JavaScript | MDN

参考:ループと反復処理 - JavaScript | MDN#ラベルつき文

ラベル付き文は、 break 文や continue 文と組み合わせて使用することができます。これは文に参照先となる識別子の接頭辞をつけます。

let str = '';

loop1:
for (let i = 0; i < 5; i++) {
  if (i === 1) {
    continue loop1;
  }
  str = str + i;
}

console.log(str);
// expected output: "0234"

6. import

import 文は、他のモジュールによってエクスポートされた読み込み専用のライブバインディングをインポートするために使用します。インポートされたモジュールは、宣言するかどうかにかかわらず、Strict モードになります。import 文は、スクリプトに type="module" がない限り、埋め込みスクリプトで使用できません。インポートされたバインディングは、バインディングをエクスポートしたモジュールによって更新されるため、ライブバインディングと呼ばれます。

また、type="module" のスクリプトを必要としない動的 import() という関数のようなものもあります。

<script> タグの nomodule 属性を使用すると、下位互換性を確保できます。

import defaultExport from "module-name";
import * as name from "module-name";
import { export1 } from "module-name";
import { export1 as alias1 } from "module-name";
import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
import { export1 , export2 as alias2 , [...] } from "module-name";
import defaultExport, { export1 [ , [...] ] } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";
var promise = import("module-name");

7. export

export 文は JavaScript モジュールを作成するときに使用され、モジュールから関数、オブジェクト、またはプリミティブ値へのライブバインディングのエクスポートを行い、import 文を使用した他のプログラムが使用できるようにします。インポートされたモジュールは読み取り専用で、エクスポートされたモジュールが変更されるたびに値が更新されます。

エクスポートされたモジュールは、宣言のあるなしにかかわらず Strict モードで動作します。export 文は、埋め込みスクリプトでは使えません。

// 事前に宣言された機能のエクスポート
export { myFunction, myVariable };

// 個別の機能のエクスポート
// (var, let, const, function, class がエクスポート可能)
export let myVariable = Math.sqrt(2);
export function myFunction() { ... };

7. KnotTextでのECMAScriptの分類

参考:MDN Web DocsでのECMAScriptの分類

7-1. グローバルオブジェクトのプロパティ(JavaScriptの実行環境がWebブラウザーの場合)

7-1-1. グローバルオブジェクトの値プロパティ

7-1-2. グローバルオブジェクトの関数プロパティ

7-1-3. グローバルオブジェクトのコンストラクタープロパティ

コンストラクターとは、「オブジェクトを作成する能力を持たせた」関数で、「new」演算子によってオブジェクトインスタンスを作成することができる。

プリミティブデータ型のラッパーオブジェクト
真偽値window.Boolean()
文字列window.String()
数値window.Number()
window.BigInt()
シンボルwindow.Symbol()
オブジェクトのためのオブジェクト
window.Object()
関数のためのオブジェクト
window.Function()
関数のより高度なオブジェクトwindow.GeneratorFunction()
window.Generator()
window.AsyncFunction()
window.Promise()
配列のためのオブジェクト
window.Array()
配列のより高度なオブジェクトwindow.ArrayBuffer()
window.DataView()
window.SharedArrayBuffer()
型付き配列のためのオブジェクトwindow.Int8Array()window.Int16Array()
window.Uint8Array()window.Uint16Array()
window.Uint8ClampedArray()
window.Int32Array()window.BigInt64Array()
window.Uint32Array()window.BigUint64Array()
window.Float32Array()window.Float64Array()
日付・時刻のためのオブジェクト
window.Date()
正規表現のためのオブジェクト
window.RegExp()
エラーのためのオブジェクト
window.Error()window.EvalError()
AggregateError
InternalError
window.RangeError()
window.ReferenceError()
window.SyntaxError()
window.TypeError()
URIError
Keyed Collections 特殊なデータ集合
マップwindow.Map()window.WeakMap()
セットwindow.Set()window.WeakSet()
Managing Memory
window.WeakRef()
Reflection
window.Proxy()

7-1-4. グローバルオブジェクトのその他のプロパティ

Atomics
window.Atomics()
JSON
window.JSON()
Math
window.Math()
Reflect
window.Reflect()

7-2. ECMAScriptの演算子「計算・論理・代入」

7-2-1. ECMAScriptの演算子「計算」

7-2-2. ECMAScriptの演算子「論理」

7-2-3. ECMAScriptの演算子「代入」


7-3. ECMAScriptのステートメント

block ステートメントブロックを作る
if ステートメント(else)条件を作る
イテレーションステートメントdo-while ステートメント必ず1回は実行されるwhileステートメント
while ステートメント条件を満たすまで繰り返す
for ステートメント指定した回数まで繰り返す
for-in ステートメントオブジェクトのためのforステートメント
for-of ステートメント配列状のオブジェクト全般のためのforステートメント
for-await-of ステートメントPromiseオブジェクトのためのfor-ofステートメント
continue ステートメント繰り返しの処理をスキップして次の繰り返しへ進む
break ステートメント繰り返し・ラベル・switchステートメントの処理を中断してステートメントから抜け出す
switch ステートメント(case, default)条件に一致するcaseを実行する
throw ステートメント関数の中で例外を発生させ、catchが存在すればcatchに移行する。
try ステートメント(catch, finally)catchのためのfinallyでtryする?

7-4. オブジェクトのためのパーツ

instanceofオブジェクトが自身のプロトタイプにコンストラクタのprototype プロパティを持っているか判別する
newnew 演算子を使用すると、開発者はユーザー定義のオブジェクト型やコンストラクタ関数を持つ組み込みオブジェクト型のインスタンスを作成することができる
deleteオブジェクトからプロパティを削除する
in指定されたプロパティが指定されたオブジェクトにある場合にtrueを返す
superオブジェクトの親の関数を呼び出すために使用できる
プロパティアクセッサーオブジェクトのプロパティにアクセスする2種類の方法(ドット表記法、ブラケット表記法)
オブジェクトリテラルObject initializerによって作成するオブジェクト

7-5. 配列のためのパーツ

配列リテラル[a, b] = [1, 2] 代入 = [] 配列をつくる 配列リテラル 「配列」オブジェクト 配列初期化 Array()でも可

7-6. 関数のためのパーツ

functionキーワード いわゆるexpression 関数を作成する
return ステートメント
this[関数] キーワード
function*[ジェネレータオブジェクトを返す、ジェネレータ関数を定義]
yield(yield*)ジェネレータ関数 キーワード
async function キーワード 非同期関数
await Promiseオブジェクト 非同期関数内のみ
class(extends) いわゆるexpression ECMAScript 2015~のclass定義

7-7. その他のパーツ

use strictモード
,(comma) 演算子それぞれの演算対象を(左から右に)評価し、最後のオペランドの値を返します。これにより、複数の式が評価される複合式を作成することができ、複合式の最終値はそのメンバー式の一番右端の値となります。これは、for ループに複数の引数を提供する場合によく使用されます。
typeof 演算子対象の値のデータ型を返す
void 演算子必ずundefinedを返す
?.(Optional chaining) 演算子接続されたオブジェクトチェーンの深くに位置するプロパティの値を、チェーン内の各参照が正しいかどうかを明示的に確認せずに読み込むことを可能にします。
labeled ステートメントラベル付け?
import
export