重複の可能性:
JavaScriptオブジェクトのクラスを取得する方法は?
Rubyでは、インスタンスのクラスをチェックするためにこれを行うことができます。
'this is an string'.class
=>String
jsに似たようなものはありますか?
重複の可能性:
JavaScriptオブジェクトのクラスを取得する方法は?
Rubyでは、インスタンスのクラスをチェックするためにこれを行うことができます。
'this is an string'.class
=>String
jsに似たようなものはありますか?
おそらく、クラスではなく、型またはコンストラクターを意味します。JavaScript ではクラスの意味が異なります。
クラスを取得するには:
var getClassOf = Function.prototype.call.bind(Object.prototype.toString);
getClassOf(new Date()); // => "[object Date]"
getClassOf('test string'); // => "[object String]"
getClassOf({ x: 1 }); // => "[object Object]"
getClassOf(function() { }); // => "[object Function]"
コンストラクターまたはプロトタイプを取得するには、必要なものに応じていくつかの方法があります。
使用しているプリミティブのタイプを調べるには、 を使用しますtypeof
。これは、文字列、ブール値、数値などで使用するのに最適です。
typeof 'test string'; // => 'string'
typeof 3; // => 'number'
typeof false; // => 'boolean'
typeof function() { }; // => 'function'
typeof { x: 1 }; // => 'object'
typeof undefined; // => 'undefined'
null
この場合、 は奇妙な振る舞いをするtypeof null
ことに注意して"object"
ください"null"
。
また、JavaScript 継承のバックボーンであるプロトタイプをObject.getPrototypeOf(myObject)
(サポートされていないmyObject.__proto__
場合はmyObject.constructor.prototype
一部のブラウザーでgetPrototypeOf
) 取得することもできます。
次の方法でコンストラクターをテストできますinstanceof
。
new Date() instanceof Date; // => true
でコンストラクターを合理的に取得することもできmyObject.constructor
ますが、これは変更できることに注意してください。コンストラクターの名前を取得するには、 を使用しますmyObject.constructor.name
。
new Date().constructor.name; // => 'Date'
これがすべてのブラウザに当てはまるかどうかはわかりませんが、次を使用できますconstructor.name
。
'some string'.constructor.name; //=>String
({}).constructor.name //=>Object
(7.3).constructor.name //=>Number
[].constructor.name //=>Array
(function(){}).constructor.name //=>Function
true.constructor.name //=>Boolean
/test/i.constructor.name //=>RegExp
(new Date).constructor.name //=>Date
(new function MyConstructor(){}())
.constructor.name; //=>MyConstructor
はJavascriptObject
のすべての母ですが、拡張することもできます (長所と短所があります) 。
Object.prototype.class = function(){
return this.constructor.name;
}
'some string'.class(); //=>String
(23).class(); //=>Number
// etc...
注: JavaScript は「クラス」を認識しません1。その継承モデルはプロトタイプです。
1 ECMAScript 標準から。
ECMAScript は、C++、Smalltalk、Java などのクラスを使用しません。代わりに、オブジェクトは、リテラル表記や、オブジェクトを作成し、プロパティに初期値を割り当てることによってオブジェクトのすべてまたは一部を初期化するコードを実行するコンストラクターなど、さまざまな方法で作成できます。各コンストラクターは、プロトタイプ ベースの継承と共有プロパティを実装するために使用される、prototype という名前のプロパティを持つ関数です。オブジェクトは、新しい式でコンストラクターを使用して作成されます。たとえば、new Date(2009,11) は新しい Date オブジェクトを作成します。new を使用せずにコンストラクターを呼び出すと、コンストラクターに依存する結果が生じます。たとえば、Date() は、オブジェクトではなく、現在の日付と時刻の文字列表現を生成します。
typeof
そしてinstanceof
あなたが必要なものです
> x = "Hello, World!"
"Hello, World!"
> typeof x
"string"
コンストラクター名をチェックして、コンストラクタークラスの名前(またはクラスと呼ばれるもの)を取得できます。
> x.constructor.name
> "String"
jsでは次を使用できます:
typeof
式
var a="this is string";
typeof a; // return "string"
function abc(){}
typeof abc; // return "function"
var a = {a:1,b:2,c:3}
typeof a; return "object"