JavaScript の型一覧
詳細で厳格な定義にはこだわりません。それを念頭にしますと、JavaScript の型は 7 種類ですの。
元としているのは次のページです。
No | 型 | 種類 | 初期化時 | 備考 |
1 | String | プライマリ | var string = “”; | 「’」または「”」で囲む。「”」がより一般的な印象 |
2 | Number | プライマリ | var number = 0; | |
3 | Boolean | プライマリ | var boolean = true; | new Boolean(false) は避ける。if 判定結果が true となるため。 |
4 | Object | 複合 | var object = {}; | new Object() は避ける。 |
5 | Array | 複合 | var array = []; | typeof の結果は object |
6 | Null | 特別 | var nullvar = null; | typeof の結果は object |
7 | Undefined | 特別 | var undefined; |
Boolean の初期化に new Boolean() を使うのを避けたほうが良いのは初めて知りました。そもそもラッパーオブジェクトを使うことが無いからですわね。ソースは次のページで、実際に試したところ、確かに new Boolean(false) を if にかけますと true の判定となりました。
また、new Object() もアンチパターンとのことでした。これは、次の理由から都のことです。説明とコードを引用いたします。
問題になる機能とは、Object() コンストラクタが受け取ったパラメータの値によっては、オブジェクトの作成を別の組み込みコンストラクタに委譲し、期待したのと違うオブジェクトを返すことがある点です。
// 文字列オブジェクト var o = new Object("I am a string"); console.log(o.constructor === String); // true // 通常のオブジェクトにはsubstring()がありませんが、 // 文字列オブジェクトにはあります console.log(typeof o.substring); // "function"
上記コードのなにがよくないのか、考えてみます。
new Object でオリジナルのオブジェクトを生成できます。このオブジェクトには、定義しておりませんので関数、つまり function がありません。
しかしながら、生成したオブジェクトの substring() のデータ型を調べてみますと、なんと関数であると返ってきます。String の substring() がどこからともなくやってきたのでしょう。
意図しない動きです。したがいまして使わないほうがよい、ということですわね♪
初期化が本当にその型で初期化されているかの調べ方と結果
typeof を使用して確認いたしました。
調べるためにわざわざファイルを作るのも面倒ですので、適当なページを Chrome で開きまして、右クリックで Developer Tools を起ち上げ、Console からコードを打ちましたの。
var string = ""; console.log(typeof string); // string var number = 0; console.log(typeof number); // number var boolean = true; console.log(typeof boolean); // boolean var object = {}; console.log(typeof object); // object var array = []; console.log(typeof array); // object console.log(Array.isArray(array)); // true var nullvar = null; console.log(typeof nullvar); // object var undefined; console.log(typeof undefined); // undefined
上記の結果となりました。
配列と null が判別できません><。けれども、typeof 演算子が返す文字列は、”number”、”string”、”boolean”、”object”、”function”、”undefined” の 6 つで、null と配列は確認しようがありません。
このことは次のページから知ることができました。
【追記】
配列は Array.isArray() 関数で確認できるとコメントいただきました!ありがとう存じます!確認用のコードに追記いたしました。
また、紹介しております参考書の次の箇所にも同様の記述がございました。ちなみに、参考書にはこのメソッドが使用できない環境での検査方法にも触れられておりました♪
関数の中で初期化する時は単独varパターンを使う
- 単独varパターン
- 関数の中でローカル変数を定義するときに使用する。
- 関数の中で「var」を「1回だけ」使用して関数内の変数すべてを宣言する。
- 変数の区切りはカンマ「,」で、宣言の最後に「;」を付ける。
- for ループのカウンタなどで使う変数(i など)も単独varパターンを適用して関数の最初に宣言する。
具体例ですの。引用元も挙げますわ。ありがとう存じますの。
function func() { var a = 1, b = 2, sum = a + b, myobject = {}, i, j, el = document.getElementById("result"), style = el.style, getStyle = function() { return style; }; // 関数の本体... }
おわりに
今回は変数の型の種類、初期化について、宣言の仕方について、と、本当に初歩的なことについて調べてまいりました。
プログラミングに慣れてきましても、各言語で基本的なことは異なりますから、今回のようなことには気をつけないと足元をすくわれますの。
細かいことで普段気がつかず、飛ばしてしまいがちな事柄です。ですけれどもきちんと調べますと、なんだかそのプログラミング言語と少し仲良くなれた気がして、嬉しいですの♪
以上です。
「JavaScript の型の種類と初期化時の値、そして単独varパターンについてメモ♪」への2件の返信
配列はArray.isArray()で判定できますが、私はそれこそObject()を使っていい具合にラップしてもらったり、ダックタイピング的に扱う方がJS的だと思います。
わたくしたちの勉強不足に補足いただきありがとう存じます!