javascript undefinedを判定する
- 作成日 2022.03.22
- 更新日 2022.12.06
- javascript
- javascript

javascriptで、undefinedを判定するサンプルコードを記述してます。「typeof」と「toString.call」を使用する2種類の方法があります。パフォーマンスは「typeof」の方が良いです。ブラウザはchromeを使用してます。
環境
- OS windows11 home
- Apache 2.4.43
- ブラウザ chrome 108.0.5359.72
undefinedを判定
「undefined」を判定するには、「typeof」を使用して判定します。
console.log( typeof undefined === 'undefined' ) // true
console.log( typeof null === 'undefined' ) // false
console.log( typeof '' === 'undefined' ) // false
console.log( typeof 0 === 'undefined' ) // false
console.log( typeof true === 'undefined' ) // false
console.log( typeof false === 'undefined' ) // false
console.log( typeof NaN === 'undefined' ) // false
「void 0」や、何も定義されていない変数は「undefined」が返ってくるので「true」になります。
console.log( typeof void 0 === 'undefined' ) // true
let foo;
console.log( typeof foo === 'undefined' ) // true
undefinedと比較
undefinedと比較しても結果は変わりませんが、
console.log( undefined === undefined ) // true
console.log( null === undefined ) // false
console.log( '' === undefined ) // false
console.log( 0 === undefined ) // false
console.log( true === undefined ) // false
console.log( false === undefined ) // false
console.log( NaN === undefined ) // false
変数として使用できるパターンもあるので「typeof」で比較した方が安全です。
(function(){
let undefined = 0; // 変数として使用
console.log(undefined);
console.log( undefined === undefined ) // true
console.log( null === undefined ) // false
console.log( '' === undefined ) // false
console.log( 0 === undefined ) // true
console.log( true === undefined ) // false
console.log( false === undefined ) // false
console.log( NaN === undefined ) // false
})();
toString.call
「toString.call」を使用して判定することもできます。
console.log( toString.call(undefined).slice(8, -1) === 'Undefined' ); // true
console.log( toString.call(void 0).slice(8, -1) === 'Undefined' ); // true
let foo;
console.log( toString.call(foo).slice(8, -1) === 'Undefined' ); // true
console.log( toString.call(null).slice(8, -1) === 'Undefined' ); // false
console.log( toString.call('').slice(8, -1) === 'Undefined' ); // false
console.log( toString.call(0).slice(8, -1) === 'Undefined' ); // false
console.log( toString.call(false).slice(8, -1) === 'Undefined' ); // false
console.log( toString.call(false).slice(8, -1) === 'Undefined' ); // false
console.log( toString.call(NaN).slice(8, -1) === 'Undefined' ); // false
パフォーマンスは「typeof」の方がいいです。
以下は、同じ処理を100万回実行した実行時間です。
実行回数:1000000回 関数名:typeof 実行時間:1.20(ms)
実行回数:1000000回 関数名:toString.call 実行時間:29.2(ms)
-
前の記事
Linux コマンドの結果を変数に格納する 2022.03.21
-
次の記事
jquery 指定した属性を削除する 2022.03.22
コメントを書く