У JavaScript / jQuery, якщо я alertякийсь об'єкт, я отримую [object]або [object Object]
Чи є спосіб дізнатися:
яка різниця між цими двома об’єктами
що це за Об'єкт
які всі властивості містить цей об’єкт та значення кожної властивості
?
У JavaScript / jQuery, якщо я alertякийсь об'єкт, я отримую [object]або [object Object]
Чи є спосіб дізнатися:
яка різниця між цими двома об’єктами
що це за Об'єкт
які всі властивості містить цей об’єкт та значення кожної властивості
?
Відповіді:
Ви можете шукати ключі та значення об'єкта, викликаючи власний for inцикл JavaScript :
var obj = {
foo: 'bar',
base: 'ball'
};
for(var key in obj) {
alert('key: ' + key + '\n' + 'value: ' + obj[key]);
}
або за допомогою .each()методу jQuery :
$.each(obj, function(key, element) {
alert('key: ' + key + '\n' + 'value: ' + element);
});
За винятком шести примітивних типів , усе в 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].
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>);Стандартний 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()і) яка різниця між цими двома об’єктами
Проста відповідь полягає в тому, що [object]вказується на хост-об'єкт, який не має внутрішнього класу. Об'єкт хоста - це об'єкт, який не є частиною реалізації ECMAScript, з якою ви працюєте, але надається хостом як розширення. DOM є загальним прикладом об'єктів хосту, хоча в більшості нових реалізацій об'єкти DOM успадковуються від рідного об'єкта і мають внутрішні імена класів (наприклад, HTMLElement , Window тощо). Власний ActiveXObject IE - ще один приклад хост-об’єкта.
[object] найчастіше спостерігається при попередженні об’єктів DOM в Internet Explorer 7 і старіших версіях, оскільки це об’єкти хосту, які не мають внутрішнього імені класу.
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));
Отримайте FireBug для Mozilla Firefox.
використання console.log(obj);
console.logнастільки ж ефективний, ви можете натиснути на об'єкт у журналі, щоб все одно отримати "
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));