potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。

JavaScript

JavaScript プロパティを追加できないクラスを作成する

JavaScriptではclassキーワードでクラスを作成できますが、クラスの実体はObjectなのでプロパティが追加できてしまいます。この動作はObject.seal()静的メソッドで無効化できるため、コンストラクタで自身に適用すればプロパティを追加できないクラスを作成…

HTML5&JS ファイルを選択して内容を読み込む

HTML5からはINPUT要素にtype="file"が用意され、JavaScriptのFile API・Blob・TypedArrayと併せてファイル内容を読み込むことができます。以下に簡単なサンプルコードを示します。 ファイルインプットからFileList、Fileを取得する。 <html lang="ja"> <head> <meta charset="utf-8"> <title>Sample</title> <script> function f</meta></head></html>…

JavaScript HTML要素関係の関数サンプル

HTML要素関係の関数サンプルコードです。 /** * ラジオボックスグループのチェックをvalueとある値の一致可否で設定します。 * @example setCheckedRadioElementsByValue("radio1", "123") */ function setCheckedRadioElementsByValue(name, value) { for (…

JavaScript 2000年以降のYYMMDD形式の文字列を日付型に変換する

2000年以降のYYMMDD形式の文字列を日付型(Date)に変換するサンプルコードです。 function dateFrom20YYMMDD(s) { if (typeof s != "string") return undefined; const m = s.match(/^(\d\d)(\d\d)(\d\d)$/) if (m == null) return undefined; const Y = pa…

JavaScript 文字列の正規表現マッチ結果をクラスで保持する

JavaScriptで文字列の正規表現のマッチ結果をクラスで保持するサンプルコードです。正規表現のマッチ結果に限らず、文字列の処理結果を保持する方法の骨組みとして使えます。 クラスで正規表現のマッチ結果だけ保持する場合 クラスで正規表現のマッチ結果を…

JavaScript 短いサンプルコード

オブジェクトを他のオブジェクトの一部にする オブジェクト配列から要素のキーセットを取得する globalThisのアルファベット小文字からはじまるプロパティの名前を一覧取得する globalThisのアルファベット大文字からはじまるプロパティの名前を一覧取得する…

JavaScript オブジェクトのプロパティ記述子を取得する

// オブジェクトのプロパティ記述子配列を取得します。 const GetObjectOwnPropertyDescArray = object => Object.entries(Object.getOwnPropertyDescriptors(window)) // プロパティ記述子配列からデータ記述子を抜き出します。 const FilterOwnPropertyDes…

JavaScript 配列様オブジェクトかプロパティから判定する

Array.from()はlengthプロパティが正の整数とみなせるオブジェクトを配列様オブジェクト(Array-like object、配列のようなオブジェクト)と判断していると考えられます。 真の配列様オブジェクトかの判断は反復可能オブジェクト以外を与えてArray.from()の…

JavaScript 配列様オブジェクトの作成とArray.from()での利用

配列様オブジェクト(Array-like object) 配列様オブジェクトのArray.from()での利用 配列様オブジェクト(Array-like object) MDNのArray.from()の説明には「Array-like object」(「配列様オブジェクト」)あるいは「配列のようなオブジェクト」という表…

JavaScript 文字列をUTF-16コードユニットの配列へ変換する

以下のコードで文字列をUTF-16コードユニットの配列に変換できます。 Array.from("", s => Array.from({length: s.length}, (_, i) => s.charCodeAt(i))) // Array(3) [ [ 55356, 57166 ], [ 55356, 57162 ], [ 55357, 56833 ] ] Array.from("", s => Array.…

JavaScript 文字列をUnicodeコードポイントへ変換する

本文 以下のコードで文字列をUnicodeコードポイントの配列に変換できます。 Array.from("", s => s.codePointAt(0)); // Array(3) [ 127822, 127818, 128513 ] 関数にしておくと便利かもしれません。 const getCodePointsFromString = (source) => { if (typ…

JavaScript Uint8ArrayとUint8ClampedArrayの要素の範囲制限方法の違い

Uint8Arrayは要素を0~255(0~0xff)の整数に収める。要素は整数かつ& 0xffで変換される。 Uint8ClampedArrayは要素を0~255(0~0xff)の整数に収める。要素は整数かつ0未満は0、255超過は255に変換される。 Uint8Array.of(255, 256, 257, 258, 0, -1, -2)…

JavaScript TypedArrayのmapメソッドの注意(強制的な型変換)

TypedArray.prototype.map(...) 変換結果がUint8→予想通りの結果 変換結果が文字列等→予想外の結果(e.g. [0, 0, 0, ...]) TypedArray.prototype.mapの戻り値はTypedArrayであり、各要素はTypedArrayの要素型に変換されます。例えばUint8Array.prototype.ma…

ブックマークレットのメモ

ブックマークレット(ブックマークに登録するJavaScript)のメモです。ブックマークやお気に入りに新しい項目を作成してURLにコードを貼り付けることで、処理を実行する項目を作成できます。 CSSセレクタに一致するA要素のリンク先をすべて開く。 クラスがcl…

JavaScript オブジェクトの初期化(オブジェクトリテラル)のプロパティサンプル

JavaScriptのオブジェクトの初期化(オブジェクトリテラル)で各種プロパティを設定するサンプルコードです。ここでは初期化のみ扱いますが、各プロパティは作成後も__defineGetter__、__defineSetter__などを使用して設定できます。 let i = 2; // 初期化に…

JavaScriptの反復処理(反復可能と反復子)はプロトコル

JavaScriptの反復処理はプロトコルとして実装されています。反復処理プロトコルは反復可能プロトコル(Iterable protocol)と反復子プロトコル(Iterator protocol)からなり、これらはオブジェクトが次表の条件を満たすことを求めます。 プロトコルはあくま…

JavaScript 文字列とサロゲートペアの注意

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 まえがき 間違ったコードと注意点 正しいコード 備考:文字列のlengthとArray.from関数 まえがき JavaScriptの文字列はUTF-16なのでサロゲートペアを含みます(少なくとも2019年12月6日…

JavaScript ECMAScriptのプリミティブ値とプリミティブデータ型について調べたこと

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 久しぶりにJavaScriptを触ったら引数の文字列判定で悩んだので、周辺情報として調べたプリミティブ値とプリミティブデータ型について記録します。 プリミティブ値とプリミティブデータ型…

JavaScript (MDN)のArray反復メソッドとC# (.NET Core 3.1, Microsoft Docs)のLINQ

JavaScript (MDN web docs, 2020/01/14時点)のArrayの反復メソッドを基準としたC# (.NET Core 3.1)のLINQとの比較です。車輪の再発明に該当すると思いますが、JavaScriptの勉強のために。 JavaScript C# 概要 entries(...) Select((item, index) => ...)(直…