こんにちは!現場の最前線でコードを書き続けていると、「JavaScriptの型判定」というテーマは、まるで終わりのない迷宮のように感じることがありますよね。
特に、画像処理や音声データ、あるいはバイナリ通信といった「ちょっと踏み込んだ開発」をしようとすると必ずぶつかるのが、TypedArray(型付き配列)の壁です。
今日は、この「一見強面だけど、実はとっても役立つやつら」の正体を、身近な例えを交えながら優しく紐解いていきましょう。大丈夫、少しずつ整理すれば必ず使いこなせるようになりますよ。
—
そもそも「TypedArray」って何者?
普通の配列(`[]`)が「なんでも詰め込める魔法のバッグ」だとしたら、`TypedArray`は「中身が決まっている厳格な専用ケース」です。
- 普通の配列: おもちゃも、服も、書類も全部入る。でも、整理整頓がちょっと大変。
- TypedArray: 「ここは数字専用の棚」「ここは8ビットのデータ専用の引き出し」と決まっている。だから処理が速い!
この「専用ケース」には、`Uint8Array`(0〜255の数字専用)や`Float32Array`(細かな小数点専用)といった種類があります。でも、プログラムを書いていると「今、手元にあるこの箱は、何専用の箱なんだろう?」と分からなくなることがありますよね。
まずは「typeof」で試してみよう……あれ?
JavaScriptで型を調べるとき、真っ先に思いつくのが `typeof` 演算子ですよね。でも、ここで最初の罠にハマります。
const myData = new Uint8Array([1, 2, 3]);
console.log(typeof myData); // 結果は “object”
あらら、「object」としか教えてくれません。これでは「普通のオブジェクト」なのか「型付き配列」なのか区別がつきませんよね。`typeof` は、残念ながら「中身が何専用の箱か」までは教えてくれないんです。
解決策:`Object.prototype.toString` を使おう
そこで登場するのが、少し呪文のような書き方ですが、「身分証明書を詳しく見せてもらう方法」です。
const data = new Uint8Array([10, 20, 30]);
// Object.prototype.toString.call を使うと、詳細な正体がわかります
const type = Object.prototype.toString.call(data);
console.log(type); // “[object Uint8Array]” と表示される!
これなら、中身が何なのかバッチリ分かりますね。「`[object ` の後ろに、そのデータの本当の姿が書かれている」と覚えておけばOKです。
すべての「型付き配列」をまとめて判定する魔法
「一つひとつ確認するのは面倒だし、とにかく『どれか一個の型付き配列』であればOKにしたい!」というケース、実務ではよくあります。そんな時は、「全部ひっくるめて確認する」のがスマートです。
function isTypedArray(target) {
// ArrayBuffer(データの元になる素材)を持っているかを確認するイメージです
// ほとんどの型付き配列は、buffer というプロパティを持っています
return ArrayBuffer.isView(target) && !(target instanceof DataView);
}
const myData = new Float32Array([0.1, 0.5]);
if (isTypedArray(myData)) {
console.log(“これは型付き配列ですね!”);
} else {
console.log(“違いますね。”);
}
ここで使った `ArrayBuffer.isView()` は、「これは何らかのデータ表示用ビュー(型付き配列など)ですか?」という非常に便利な判定メソッドです。現場のアーキテクトがよく使う、一番信頼できる手法の一つですよ。
—
最後に:つまずいても大丈夫
JavaScriptの型判定は、歴史的な経緯もあって少し入り組んでいます。「なんでこんなに複雑なの?」とイライラすることもあるかもしれませんが、それはあなたが「正しくプログラムを書こう」と努力している証拠です。
1. 個別に特定したい時: `Object.prototype.toString.call(data)` で詳しく聞く。
2. とにかく型付き配列か知りたい時: `ArrayBuffer.isView(data)` でサクッと確認する。
まずはこの2つだけ覚えておけば、現場で困ることはほとんどありません。
もしコードが動かなくても、「あ、今は型を間違えていたんだな」と気づくだけで、あなたはすでに一歩前進しています。焦らず、少しずつ、一緒にコードの深淵を楽しんでいきましょうね。
またいつでも、迷ったときはここへ戻ってきてください。応援しています!

コメント