データ型 - Javascript

データ型とは?

プログラミングにおける「 データ型 」とは、「 データの種類 」のことです。単に「 型 」という言い方もします。

「 はじめまして 」というのは、「 日本語 」や「 ひらがな 」という言い方もできますが、紙などに書かれていた場合、「 文字 」という言い方もできます。

数字の場合は、どうでしょうか。「 1 」というのは、「 数字 」にですが、紙などに書かれていた場合は「 文字 」とも言えます。

無意識に「 日本語 」、「 ひらがな 」、「 文字 」や「 数字 」という言い方を使い分けています。

Javascript は、「 動的型付け言語 」になります。動的型付けとは、プログラムの実行過程で、「 自動的に型の指定 」をしてくれるプログラミング言語ですが、「 意図しない型の変換 」が起きる場合があります。

その為、Javascript のプログラミングのコードを書くときには「 型 」を意識してコードを書かないと、プログラムの実行時に予期せぬエラーが起こり、問題の解決に時間がかかることがあります。

自動で型の変換をしてくれるプログラミング言語の場合であっても、「 型 」を意識してコードを書くことは重要です。

型の種類

Javascript のデータ型は大きく分けると、「 プリミティブ型 」と「 オブジェクト型 」に分けることができます。プリミティブ型には、次の7種類があります。

  • 数値
  • 長整数
  • 文字列
  • 論理値
  • undefined
  • null
  • シンボル

プリミティブ : primitive

原始的な、素朴な、未発達な、幼稚な

オブジェクト : object

物体、対象

プリミティブ型ではないものは、すべてオブジェクト型となります。

オブジェクト型には、いろいろな種類があります。下記はその一部です。

  • Object(オブジェクト)
  • Array(配列)
  • Function(関数)

意図しない型の変換

let a = "10";
let b = 3;

console.log(a - b); // 7
console.log(a + b); // 103

フォームから空欄で送信された場合、undefined ではなく0になります。

const num = "";

if(Number(num) === ""){
  console.log(true);
} else {
  console.log(false);
}

console.log(Number(num));

型の判別方法

型の判別には、typeof 演算子で調べることができますが、null や Object はすべて object と判別されます。

console.log(typeof("hello"));
console.log(typeof(2024));
console.log(typeof(null));
console.log(typeof(new Date()));
console.log(typeof(new Array()));

null や Object も判別するには、Object.prototype.toString を使います。

let toString = Object.prototype.toString;

console.log(toString.call('Hello'));

console.log(typeof(toString.call('Hello')));

if(toString.call('Hello') == "[object String]"){
  console.log("string")
}
let toString = Object.prototype.toString;
let obj = {};

console.log(toString.call(null));
console.log(toString.call(new Array()));
console.log(toString.call(obj));
文字列 [object String]
数字 [object Number]
配列 [object Array]
オブジェクト [object Object]
null [object Null]
true / false [object Boolean]

if文などで条件分岐する際は、次のようにします。

let toString = Object.prototype.toString;

if(toString.call(true) == "[object Boolean]"){
  console.log("boolean");
}

sample

console.log(typeof true);// => "boolean"
console.log(typeof 42); // => "number"
console.log(typeof 9007199254740992n); // => "bigint"
console.log(typeof "JavaScript"); // => "string"
console.log(typeof Symbol("シンボル"));// => "symbol"
console.log(typeof undefined); // => "undefined"
console.log(typeof null); // => "object"
console.log(typeof ["配列"]); // => "object"
console.log(typeof { "key": "value" }); // => "object"
console.log(typeof function() {}); // => "function"

長整数型(BigInt)

数値型で安全に扱える最大の数値は、次次ように求められます。

script.js

console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991

数値型でこの値よりも大きな値を扱うと、正確な結果を得られない場合があります。

script.js

console.log(9007199254740991 + 1) // 9007199254740992
console.log(9007199254740991 + 2) // 9007199254740992

ES2020から長整数型(BigInt)が導入され、大きな値を正確に表現できるようになりました。

長整数型を使うには、次のように整数リテラルの末尾にnを追加するか BigInt オブジェクトのコンストラクタを呼び出して作成します。

script.js

console.log(typeof 9007199254740992n);

const num = BigInt(10);
console.log(typeof num);

BigInt は、小数点を扱ったり、BigInt と数値型の計算を行うとエラーになります。

script.js

console.log(9007199254740992n + 1);

// const num = BigInt(3.14);
// console.log(num);