JavaScript / jQueryでは、alert
オブジェクトがある場合、[object]
または [object Object]
知る方法はありますか:
これら2つのオブジェクトの違いは何ですか
これはどのタイプのオブジェクトですか
このオブジェクトに含まれるすべてのプロパティと各プロパティの値
?
JavaScript / jQueryでは、alert
オブジェクトがある場合、[object]
または [object Object]
知る方法はありますか:
これら2つのオブジェクトの違いは何ですか
これはどのタイプのオブジェクトですか
このオブジェクトに含まれるすべてのプロパティと各プロパティの値
?
回答:
JavaScriptのネイティブfor in
ループを呼び出すことで、オブジェクトのキーと値を検索できます。
var obj = {
foo: 'bar',
base: 'ball'
};
for(var key in obj) {
alert('key: ' + key + '\n' + 'value: ' + obj[key]);
}
またはjQueryの.each()
メソッドを使用:
$.each(obj, function(key, element) {
alert('key: ' + key + '\n' + 'value: ' + element);
});
6つのプリミティブ型の例外を除いて、すべて ECMA- / JavaScriptでオブジェクトです。配列; 関数; すべてがオブジェクトです。これらのプリミティブのほとんどでさえ、実際にはメソッドの選択が制限されたオブジェクトでもあります。必要に応じて、フードの下のオブジェクトにキャストされます。基本クラス名を知るにはObject.prototype.toString
、次のようにオブジェクトのメソッドを呼び出すことができます。
alert(Object.prototype.toString.call([]));
上記が出力されます[object Array]
。
他のいくつかのクラス名は、ありますように[object Object]
、[object Function]
、[object Date]
、[object String]
、[object Number]
、[object Array]
、と[object Regex]
。
var str = 'primitive'; str.foo = 'bar'; /*wouldn't work*/
一方、それvar oStr = new String('string object'); oStr.foo = 'bar'; /*works*/
を抽象化してすべてのオブジェクトと呼ぶ場合は、プリミティブをプリミティブオブジェクトと考えるのをやめることができますが、これは真のJavaScriptオブジェクトのスーパークラスと同等ではありません。
console.log
オブジェクトの検査に使用する
Firefoxの場合-Firebug:
console.dir(<object>);
Slashnickから借用したオブジェクトキーを取得する標準JS :
var fGetKeys = function(obj){
var keys = [];
for(var key in obj){
keys.push(key);
}
return keys;
}
// Example to call it:
var arrKeys = fGetKeys(document);
for (var i=0, n=arrKeys.length; i<n; i++){
console.log(i+1 + " - " + arrKeys[i] + document[arrKeys[i]] + "\n");
}
<object>
上記のは、オブジェクトへの変数参照に置き換えられます。console.log()
それが何であるかわからない場合は、コンソールで使用することです。 alert()
i)これら2つのオブジェクトの違いは何ですか
簡単な答えは、[object]
内部クラスを持たないホストオブジェクトを示しているということです。ホストオブジェクトは、使用しているECMAScript実装の一部ではないオブジェクトですが、拡張機能としてホストによって提供されます。DOMはホストオブジェクトの一般的な例ですが、ほとんどの新しい実装では、DOMオブジェクトはネイティブオブジェクトから継承し、内部クラス名(HTMLElement、Windowなど)を持っています。IE独自のActiveXObjectは、ホストオブジェクトのもう1つの例です。
[object]
内部クラス名を持たないホストオブジェクトであるため、Internet Explorer 7以前でDOMオブジェクトに警告するときに最もよく見られます。
ii)これはどのタイプのオブジェクトですか
を使用して、オブジェクトの「タイプ」(内部クラス)を取得できますObject.prototype.toString
。仕様では、常にの形式[object [[Class]]]
で文字列を返す必要があります。[[Class]]
は、Object、Array、Date、RegExpなどの内部クラス名です。このメソッドは、次のコマンドを使用して、任意のオブジェクト(ホストオブジェクトを含む)に適用できます。
Object.prototype.toString.apply(obj);
多くのisArray
実装は、この手法を使用して、オブジェクトが実際に配列であるかどうかを検出します(IEでは、他のブラウザーほど堅牢ではありません)。
iii)このオブジェクトに含まれるすべてのプロパティと各プロパティの値
ECMAScript 3では、for...in
ループを使用して列挙可能なプロパティを反復処理できます。ほとんどの組み込みプロパティは列挙できないことに注意してください。同じことがいくつかのホストオブジェクトにも当てはまります。ECMAScript 5では、を使用して、継承されていないすべてのプロパティの名前を含む配列を取得できますObject.getOwnPropertyNames(obj)
。この配列には、列挙不可能な列挙可能なプロパティ名が含まれます。
これがスパムとしてカウントされないことを願っています。無限のデバッグセッションの後、私は謙虚に関数を書きました:http : //github.com/halilim/Javascript-Simple-Object-Inspect
function simpleObjInspect(oObj, key, tabLvl)
{
key = key || "";
tabLvl = tabLvl || 1;
var tabs = "";
for(var i = 1; i < tabLvl; i++){
tabs += "\t";
}
var keyTypeStr = " (" + typeof key + ")";
if (tabLvl == 1) {
keyTypeStr = "(self)";
}
var s = tabs + key + keyTypeStr + " : ";
if (typeof oObj == "object" && oObj !== null) {
s += typeof oObj + "\n";
for (var k in oObj) {
if (oObj.hasOwnProperty(k)) {
s += simpleObjInspect(oObj[k], k, tabLvl + 1);
}
}
} else {
s += "" + oObj + " (" + typeof oObj + ") \n";
}
return s;
}
使用法
alert(simpleObjInspect(anyObject));
または
console.log(simpleObjInspect(anyObject));
Spotlight.jsは、ウィンドウオブジェクトや、特定のものを探す他のホストオブジェクトを反復処理するための優れたライブラリです。
// find all "length" properties
spotlight.byName('length');
// or find all "map" properties on jQuery
spotlight.byName('map', { 'object': jQuery, 'path': '$' });
// or all properties with `RegExp` values
spotlight.byKind('RegExp');
// or all properties containing "oo" in their name
spotlight.custom(function(value, key) { return key.indexOf('oo') > -1; });
あなたはこのためにそれを好きになるでしょう。
決定された小道具の最初のインスタンスのためのオブジェクトのスキャン:
var obj = {a:'Saludos',
b:{b_1:{b_1_1:'Como estas?',b_1_2:'Un gusto conocerte'}},
d:'Hasta luego'
}
function scan (element,list){
var res;
if (typeof(list) != 'undefined'){
if (typeof(list) == 'object'){
for(key in list){
if (typeof(res) == 'undefined'){
res = (key == element)?list[key]:scan(element,list[key]);
}
});
}
}
return res;
}
console.log(scan('a',obj));