JavaScript基礎(三)typeof操作子

4405 ワード

typeof操作符
typeofオペレータは、計算されていない操作数の種類を示す文字列を返します.
typeof operand
typeof (operand)
タイプ
結果
undefined
「undefined」
null
「object」
ボロア
「bollan」
Number
「number」
String
ストリングス
Symbol
「smbol」
宿主オブジェクト(Js環境提供)
Implementation-dependent
関数オブジェクト
「function」
その他のオブジェクト
「object」
// Numbers
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; //   NaN "Not-A-Number"   
typeof Number(1) === 'number'; //          !

// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof         
typeof String("abc") === 'string'; //          !

// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; //          !

// Symbols
typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';

// Undefined
typeof undefined === 'undefined';
typeof declaredButUndefinedVariable === 'undefined';
typeof undeclaredVariable === 'undefined'; 

// Objects
typeof {a:1} === 'object';

//   Array.isArray    Object.prototype.toString.call
//     ,    
typeof [1, 2, 4] === 'object';

typeof new Date() === 'object';

//          ,    !
typeof new Boolean(true) === 'object';
typeof new Number(1) === 'object';
typeof new String("abc") === 'object';

//   
typeof function(){} === 'function';
typeof class C{} === 'function'
typeof Math.sin === 'function';
typeof new Function() === 'function';
null
JavaScriptの最初の実装では、JavaScriptの値は、タイプを表すラベルと実際のデータ値によって表される.オブジェクトの種類ラベルは0です.nullは空のポインターを表しているので、nullのタイプラベルも0になり、typeof nullは間違って「object」に戻りました.(reference)
new操作子を使う
// All constructor functions while instantiated with 'new' keyword will always be typeof 'object'
var str = new String('String');
var num = new Number(100);

typeof str; // It will return 'object'
typeof num; // It will return 'object'

// But there is a exception in case of Function constructor of Javascript

var func = new Function();

typeof func; // It will return 'function'
文法中の括弧
// Parentheses will be very much useful to determine the data type for expressions.
var iData = 99;

typeof iData + ' Wisen'; // It will return 'number Wisen'
typeof (iData + ' Wisen'); // It will return 'string'
正規表現
正規表現の文字数の種類については、ブラウザによって基準に合わないと判断します.
typeof /s/ === 'function'; // Chrome 1-12 ,     ECMAScript 5.1
typeof /s/ === 'object'; // Firefox 5+ ,    ECMAScript 5.1
一時死地にとどまる
ブロックレベルのスコープはlet constで、ステートメントの前にtypeof操作を行うとReferenceErrが投げ出されます.ブロックレベルのスコープはブロックの頭にあります.一時的にデッドゾーンにあります.初期化されていることを知っています.この期間に変数にアクセスするとエラーが発生します.
例外
typeof document.all === 'undefined'
IE
IE 6,7,8において、多くの宿主オブジェクトは、関数ではなくオブジェクトである.
typeof alert === 'object'
よくある問題
1.typeofの戻り値は全部でいくつありますか?
答:「number」「string」「bollan」「undefined」「Object」「function」「smbol」の7つの戻り値
2.typeofはどうしてobjectとfunctionを区別しますか?
答え:関数はECMAScriptでは対象であり、データの種類ではなく、関数にはいくつかの特殊な属性が含まれていますので、typeofを使って区別する必要があります.実際に使用する過程ではこの必要があります.
3.typeofの足りないところは何がありますか?
typeofオペレータはオブジェクト、配列、正則を正確に区別できません.戻り値は「object」です.一部の早期ブラウザバージョンは正則オブジェクトに対して「function」を返します.IE 67でtypeof alert/object、他のブラウザtype alert/function
4.次の表式の値を判断する
typeof 1/0   //NaN
typeof (1/0)  //number
typeof typeof 1/0 // NaN
typeof typeof (1/0) // string
typeof (typeof 1/0) // number
5.typeofで対象の潜在的な落とし穴を判断すると何ですか?
JavaScriptはtypeof []==='object'typeof null === 'object'typeof function(){}==='function'に対して、typeofを用いて判断する際にこれらの状況を考慮する必要があります.もちろん、代替方法を選択して判断することもできます.戻り値はObject.prototype.toString.call([])と似ています.正規処理を[object Array]として加えることもできます.
参考資料:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof