2016-07-06 7 views
3

オブジェクトのtoStringメソッドを呼び出し(コンテキストの変更のため)と共に呼び出すと、文字列が返されます。この文字列には、呼び出すために与えられた値のデータ型が含まれます。JavaScript:データ型の検出に "Object.prototype.toString.call(obj)"を使用できますか?

var obj = {}; 
var field = []; 
var str = 'abc'; 
var num = 3; 
var reg = /.*/; 
var bool = true; 
var notANumber = NaN; 
var undef = undefined; 

console.log(Object.prototype.toString.call(obj)); // [object Object] 
console.log(Object.prototype.toString.call(field)); // [object Array] 
console.log(Object.prototype.toString.call(str)); // [object String] 
console.log(Object.prototype.toString.call(num)); // [object Number] 
console.log(Object.prototype.toString.call(reg)); // [object RegExp] 
console.log(Object.prototype.toString.call(bool)); // [object Boolean] 
console.log(Object.prototype.toString.call(notANumber)); // [object Number] 
console.log(Object.prototype.toString.call(undefined)); // [object Undefined] 

私は私の工夫から何を言うことができます。通常のJavaScriptのすごみ横(NaNの数である)、正常に動作するようです。

は今、私は自分自身に尋ねる:

私はなど、いくつかの.split(/ \ sの/)で機能させる場合は、文字列としてデータ型を返す、私はタイプの検出のためにそれを使用することができます。

しかし、私は信用します:

私はプログラマがそのようにObject.prototype.toString.callは、構築し使用することを見たことがありません。

う機能が期待通りの仕事、上述のように:彼らは私の質問がある

typeofを使用したり、特定の方法を探して...

ブラウザでJavaScriptの実装が異なるため、失敗しますか?または何か他の理由のために失敗しますか?

答えて

2

specifications at MDNによれば、Object.prototype.toStringはすべてのブラウザで完全にサポートされているため、一貫して動作するはずです。

Iのみarrayobjectの間の差を検出することは、単にtypeof使用からの結果を区別するであろうことを指摘したいと思います:

EDIT 1

そしてreg変数はまたとして検出しますobject

var obj = {}; 
 
var field = []; 
 
var str = 'abc'; 
 
var num = 3; 
 
var reg = /.*/; 
 
var bool = true; 
 
var notANumber = NaN; 
 
var undef = undefined; 
 

 
console.log(typeof obj); // object 
 
console.log(typeof field); // object 
 
console.log(typeof str); // string 
 
console.log(typeof num); // number 
 
console.log(typeof reg); // object 
 
console.log(typeof bool); // boolean 
 
console.log(typeof notANumber); // number 
 
console.log(typeof undefined); // undefined 
 
//Data from original post: 
 
console.log(Object.prototype.toString.call(obj)); // [object Object] 
 
console.log(Object.prototype.toString.call(field)); // [object Array] 
 
console.log(Object.prototype.toString.call(str)); // [object String] 
 
console.log(Object.prototype.toString.call(num)); // [object Number] 
 
console.log(Object.prototype.toString.call(reg)); // [object RegExp] 
 
console.log(Object.prototype.toString.call(bool)); // [object Boolean] 
 
console.log(Object.prototype.toString.call(notANumber)); // [object Number] 
 
console.log(Object.prototype.toString.call(undefined)); // [object Undefined]

+0

'regex'は、異なるすぎる – Alnitak

+0

' typeof'と 'Object.prototype.toString.call()'の違いは何ですか?両方の結果をあなたの答えに追加できますか? – Bill

関連する問題