JavaScript基礎(三)typeof操作子
4405 ワード
typeof操作符
typeofオペレータは、計算されていない操作数の種類を示す文字列を返します.
結果
undefined
「undefined」
null
「object」
ボロア
「bollan」
Number
「number」
String
ストリングス
Symbol
「smbol」
宿主オブジェクト(Js環境提供)
Implementation-dependent
関数オブジェクト
「function」
その他のオブジェクト
「object」
JavaScriptの最初の実装では、JavaScriptの値は、タイプを表すラベルと実際のデータ値によって表される.オブジェクトの種類ラベルは0です.nullは空のポインターを表しているので、nullのタイプラベルも0になり、typeof nullは間違って「object」に戻りました.(reference)
new操作子を使う
正規表現の文字数の種類については、ブラウザによって基準に合わないと判断します.
ブロックレベルのスコープはlet constで、ステートメントの前にtypeof操作を行うとReferenceErrが投げ出されます.ブロックレベルのスコープはブロックの頭にあります.一時的にデッドゾーンにあります.初期化されていることを知っています.この期間に変数にアクセスするとエラーが発生します.
例外
IE 6,7,8において、多くの宿主オブジェクトは、関数ではなくオブジェクトである.
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.次の表式の値を判断する
JavaScriptは
参考資料:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/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';
nullJavaScriptの最初の実装では、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'
IEIE 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