目次
- ,(comma) 演算子
- typeof 演算子
- void 演算子
- ?.(Optional chaining) 演算子
- labeled ステートメント
- import
- 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 ステートメント
参考:ループと反復処理 - 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. グローバルオブジェクトの値プロパティ
- window.globalThis
- window.Infinity
- window.NaN
- window.undefined
7-1-2. グローバルオブジェクトの関数プロパティ
- window.isFinite()
- window.isNaN()
- window.parseFloat()
- window.parseInt()
- URIハンドリング関数
- window.decodeURI()
- window.decodeURIComponent()
- window.encodeURI()
- window.encodeURIComponent()
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 |
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 プロパティを持っているか判別する |
---|---|
new | new 演算子を使用すると、開発者はユーザー定義のオブジェクト型やコンストラクタ関数を持つ組み込みオブジェクト型のインスタンスを作成することができる |
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 |