/**
* 型・値のチェック
*/
/* typeof演算子の返す値 */
// https://developer.mozilla.org/ja/docs/JavaScript/Reference/Operators/typeof
// 未定義型 "undefined"
// Null型 "object"
// 真偽型 "boolean"
// 数値型 "number"
// 文字列型 "string"
// 関数オブジェクト "function"
// 他のオブジェクト "object"
/* 未定義型のチェック */
// https://developer.mozilla.org/ja/docs/JavaScript/Reference/Global_Objects/undefined
// 宣言されているが値が代入されていない変数[※]
// 未定義のtypeofは"undefined"
// 未定義の値は唯一undefinedだけ
test("未定義のチェック", function() {
var a;
ok(typeof a === 'undefined', '型がundefined型かどうかをチェック - typeof 変数 === "undefined" - undefinedのチェックはこの書き方を使う。');
ok(a === undefined, '値がundefinedかどうかをチェック - 変数 === undefined');
});
// 変数 === undefinedではなくtypeofで判定する理由
// 未代入の変数は自動的にundefinedが設定される。
// undefinedは初期値としてundefinedを持つグローバル変数なのでundefinedの値を変更される可能性がある。
// 現在ではほとんどundefinedは読み取り専用なので 変数 === undefined でもよいかもしれない
//「グローバルオブジェクトが読み取り専用となる
// NaN 、Infinity 、および undefined グローバルオブジェクトはECMAScript 5仕様に基づき、読み取り専用となりました。」
// https://developer.mozilla.org/ja/docs/JavaScript/New_in_JavaScript/1.8.5
// ※
// 値を代入していない変数の値はundefined。
// 宣言もしていない変数の利用はReferenceError
// var x;
// console.log(x); undefined
// console.log(y); ReferenceError
/* Null型のチェック */
// Null型はnullを指定したもの
// Null型のtypeofは"object"
// Null型の値は唯一nullだけ
test("Null型のチェック", function() {
var o = {};
o = null;
ok(o === null, 'Null型のチェックは 変数 === null を使う。');
ok(typeof null === 'object', '理由1. typeof nullは"object"になる。');
ok(null == undefined, '理由2. ==演算子によるnullとundefinedの比較はtrueになる。');
});
/* 配列かどうかをチェック */
// 配列の
// https://developer.mozilla.org/ja/docs/JavaScript/Reference/Operators/instanceof
test("配列かどうかをチェック", function() {
var arr = [];
ok(arr instanceof Array === true, '配列です。');
});
<h1 id="qunit-header">QUnit example</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup, will be hidden</div>
External resources loaded into this fiddle: