JSの型の種類
- 基本型とオブジェクト型の2つに分かれる
- その中で基本型は以下の通り
- 文字列型
- 数値型
- ブーリアン型
- null型
- undefined型
動的型言語と静的型言語について
- 動的型言語とは、変数に対して任意の型を代入できる言語のこと
- 'hello'(文字列型)や23(数値型)など任意のものを代入できる
- 静的型言語とは、変数に代入できる値やオブジェクト参照を制限するもののこと
- JSは動的型言語のため、変数に対しての型はない一方、値に対しての型がある。
- その値に対しての型を判定する演算子がtypeof演算子
- console.log(typeof 37); => number(数値型)
文字列
- typeof演算子で string
- クォーテーションで囲む
- 改行やタブなど特殊な文字列に対してはエスケープシーケンスを使う
- Stringクラス(文字列クラス)があり、文字列値から文字列オブジェクトへの暗黙の型変換が起きる
- 明示的な型変換を行う場合はString関数を使う
js
//1.クォーテーションで囲み宣言
const str = 'hello world';
//2.typeof演算子で 'string'
console.log(typeof str);
//string
//3.エスケープシーケンス(バックスラッシュを使う)
const str2 = 'hello\\world';
//"hello\world"
//4.文字列オブジェクトのプロパティにアクセスできる(メソッドを使える)
console.log(str.length);
//11 (スペースを含む)
//5.文字列オブジェクトのtypepf演算の結果はオブジェクトである
const str3 = new Object('hello world');
str == str3; //型変換を含まず比較
//true
str === str3;//型変換を含んで比較。stringとobject
//false
//6.String関数で明示的に型変換
var str4 = String(47);
console.log(typeof str4);
//string
5において、基本的には文字列値と文字列オブジェクトを混同して紛らわしくなるため、明示的に文字列オブジェクトを生成することはない。
また同値比較に関して
- [==] 型変換を含まず比較する
- [===] 型変換をして比較する
ことはよく出てくるので覚えておく。
数値型
- typeof演算子で number
- 64ビットの浮動小数点数で表せられる
- 数値クラス
- NaN (Not a Number)
js
//1.宣言
const num = 30;
//2.typeof演算子で 'nember'
console.log(typeof num);
//num
//3.数値オブジェクトのプロパティにアクセスできる(メソッドを使える)
console.log(tyoeof num.toString);
//string
//3.不動小数点は数値は近似値になる
(0.1 + 0.2) == 0.3;
//false
(10/3 - 3) == 1/3;
//false
//4.Number関数呼び出し
const num1 = Number('30');
console.log(typeof num1);
//number
//5.NaN
NaN + 1;//NaN
NaN * 1;//NaN
NaN == 1;//false
NaN == NaN;//false
NaN > 1;//false
//isNaN関数で判定する
isNaN(NaN);//true
//NaNは型判定でオブジェクトを返す。
const nanobj = new Number(NaN);
console.log(typeof nanobj);
//object
5番でNaNはどの演算でもNaNを返し、どの同値比較、比較演算でもfalseを返す。
また、値の型はオブジェクトを返す。
ブーリアン型
- 真偽値を取る
- tureとfalseはリテラル値
js
//1.宣言
const flag = true;
console.log(flag); //true
console.log(!flag); //false
//2.typeof演算子で 'boolean'
console.log(typeof flag);
//boolean
//3.ブーリアンオブジェクト
console.log(typeof flag.toString);
//stirng
//4.ブーリアン関数
const tval = Boolean(true);
tval == true;
//true
null型
- オブジェクト参照との関係で意味を持ち、「なにも参照していない」という意味
- typeof演算でなぜかobjectを返す。これはバグのようなもの
- nullクラスはない
js
//1.値の型はオブジェクト
console.log(typeof null);
//object
//nullクラスはない
console.log(null.toString);
//typeError
undefined型
- 値はundefinedのひとつだけ
- 明示的に値を代入していない変数の初期値、未定義値
- typeof演算の結果もundefined
- リテラル値ではなく、定義済みのグローバル変数である
- null値がリテラル値なのは、const x = null; のように代入する必要があるため
- undefined値が現れる場所は以下の通り
- 未定義の変数の値
- 存在しないプロパティの値
- 実引数を与えず関数の呼び出し
- Return文がない関数の返り値
- Void演算子の評価結果
js
//1.undefinedは定義済みのグローバル変数である。代入なしで現れる。
const a;
console.log(a);
//undefined
//undefinedクラスはない
console.log(undefined.toString);
//typeError
オブジェクト型
- 基本型以外はオブジェクト型だと考えて良い
- 関数はオブジェクト型だと考えても問題はないが、typeof演算の結果は functionを返す
- 関数型という型があるかどうかは議論が分かれる部分である
js
function fn(){};
console.log(typeof fn)
//function