JavaScript / jQuery에서 alert객체가 있으면 [object]또는 [object Object]
알 수있는 방법이 있습니까?
이 두 물체의 차이점은 무엇입니까
이것은 어떤 유형의 객체입니까
이 개체에 포함 된 모든 속성과 각 속성의 값
?
답변:
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);
});
여섯 개 기본 유형을 제외하고 , 모든 ECMA-/ 자바 스크립트 객체입니다. 어레이; 기능; 모든 것이 객체입니다. 이러한 프리미티브의 대부분도 실제로는 제한된 메서드 선택을 가진 객체이기도합니다. 필요한 경우 후드 아래의 물체로 주조됩니다. 기본 클래스 이름을 알기 위해 다음 Object.prototype.toString과 같이 객체 에서 메서드를 호출 할 수 있습니다 .
alert(Object.prototype.toString.call([]));
위의 출력이 [object Array].
이 몇 가지 다른 클래스 이름은 같은 [object Object], [object Function], [object Date], [object String], [object Number], [object Array], 및[object Regex] .
typeof new String("foo");"객체"를 typeof "foo";생성하고, "문자열" 을 생성 하는 동안 래핑 된 원시 값 입니다. 참조
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)이 두 개체의 차이점은 무엇입니까
간단한 대답은 [object]내부 클래스가없는 호스트 개체를 나타내는 것입니다. 호스트 개체는 작업중인 ECMAScript 구현의 일부가 아니지만 호스트에서 확장으로 제공하는 개체입니다. 대부분의 최신 구현에서 DOM 개체는 기본 개체에서 상속되고 내부 클래스 이름 (예 : HTMLElement , Window 등)을 갖지만 DOM은 호스트 개체의 일반적인 예입니다 . IE의 독점 ActiveXObject는 호스트 개체의 또 다른 예입니다.
[object] 내부 클래스 이름이없는 호스트 개체이기 때문에 Internet Explorer 7 이하에서 DOM 개체를 경고 할 때 가장 일반적으로 표시됩니다.
ii) 이것은 어떤 유형의 객체입니까
를 사용하여 객체의 "유형"(내부 클래스)을 가져올 수 있습니다 Object.prototype.toString. 사양에서는 항상 형식의 문자열을 반환해야합니다 [object [[Class]]]. 여기서는 Object , Array , Date , RegExp[[Class]] 등과 같은 내부 클래스 이름입니다 .이 메서드는 다음을 사용하여 모든 개체 (호스트 개체 포함)에 적용 할 수 있습니다.
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));