Что означает объект [object Object]?
Я пытаюсь предупредить возвращаемое значение из функции, и я получаю это в сообщении
[объект объекта]
вот код javascript
<script type="text/javascript">
$(function ()
{
var $main = $('#main'),
$1 = $('#1'),
$2 = $('#2');
$2.hide(); // hide div#2 when the page is loaded
$main.click(function ()
{
$1.toggle();
$2.toggle();
});
$('#senddvd').click(function ()
{
alert('hello');
var a=whichIsVisible();
alert(whichIsVisible());
});
function whichIsVisible()
{
if (!$1.is(':hidden')) return $1;
if (!$2.is(':hidden')) return $2;
}
});
</script>
whichIsVisible - это функция, которую я пытаюсь проверить на
Ответы
Ответ 1
Преобразованием по умолчанию из объекта в строку является "[object Object]"
.
Поскольку вы имеете дело с объектами jQuery, вы можете захотеть сделать
alert(whichIsVisible()[0].id);
распечатать идентификатор элемента.
Как уже упоминалось в комментариях, вы должны использовать инструменты, включенные в браузеры, такие как Firefox или Chrome, для анализа объектов, выполняя console.log(whichIsVisible())
вместо alert
.
Sidenote: идентификаторы не должны начинаться с цифр.
Ответ 2
Как уже отмечали другие, это сериализация объекта по умолчанию. Но почему это [object Object]
а не просто [object]
?
Это потому, что в Javascript есть разные типы объектов!
- Функциональные объекты:
stringify(function(){})
→ [object Function]
- Массив объектов:
stringify([])
→ [object Array]
- RegExp объекты
stringify(/x/)
→ [object RegExp]
- Объекты даты
stringify(new Date)
→ [object Date]
- ... еще несколько...
- и объекты объекты !
stringify({})
→ [object Object]
Это потому, что функция конструктора называется Object
(с большой буквы "O"), а термин "object" (с маленькой буквы "o") относится к структурной природе вещи.
Обычно, когда вы говорите об "объектах" в Javascript, вы на самом деле имеете в виду " объекты объектов ", а не другие типы.
где stringify
должен выглядеть так:
function stringify (x) {
console.log(Object.prototype.toString.call(x));
}
Ответ 3
[object Object]
- это представление по умолчанию toString объекта в javascript.
Если вы хотите узнать свойства своего объекта, просто выполните его следующим образом:
for(var property in obj) {
alert(property + "=" + obj[property]);
}
В вашем конкретном случае вы получаете объект jQuery. Попробуйте сделать это вместо:
$('#senddvd').click(function ()
{
alert('hello');
var a=whichIsVisible();
alert(whichIsVisible().attr("id"));
});
Это должно предупредить идентификатор видимого элемента.
Ответ 4
Это значение, возвращаемое этим объектом toString()
.
Я понимаю, что вы пытаетесь сделать, потому что я вчера ответил на ваш вопрос об определении того, какой div виден.:)
Функция whichIsVisible()
возвращает фактический объект jQuery, потому что я думал, что это будет более программно полезно. Если вы хотите использовать эту функцию для целей отладки, вы можете просто сделать что-то вроде этого:
function whichIsVisible_v2()
{
if (!$1.is(':hidden')) return '#1';
if (!$2.is(':hidden')) return '#2';
}
Тем не менее, вы действительно должны использовать правильный отладчик, а не alert()
, если вы пытаетесь отладить проблему. Если вы используете Firefox, Firebug отлично. Если вы используете IE8, Safari или Chrome, у них есть встроенные отладчики.
Ответ 5
Вы можете увидеть значение внутри [объекта объекта], как это
Alert.alert( JSON.stringify(userDate) );
Попробуй вот так
realm.write(() => {
const userFormData = realm.create('User',{
user_email: value.username,
user_password: value.password,
});
});
const userDate = realm.objects('User').filtered('user_email == $0', value.username.toString(), );
Alert.alert( JSON.stringify(userDate) );
ссылка
https://off.tokyo/blog/react-native-object-object/
Ответ 6
[object Object]
- это стандартное строковое представление JavaScript Object
. Это то, что вы получите, если вы запустите этот код:
alert({}); // [object Object]
Вы можете изменить представление по умолчанию, переопределив метод toString
следующим образом:
var o = {toString: function(){ return "foo" }};
alert(o); // foo
Ответ 7
Основы
Возможно, вы этого не знаете, но в JavaScript всякий раз, когда мы взаимодействуем со строковыми, числовыми или логическими примитивами, мы попадаем в скрытый мир теней и приведения объектов.
строка, число, логическое значение, ноль, неопределенное значение и символ.
В JavaScript есть 7 примитивных типов: undefined
, null
, boolean
, string
, number
, bigint
и symbol
. Все остальное является объектом. Примитивные типы boolean
, string
и number
могут быть обернуты их объектными аналогами. Эти объекты являются экземплярами конструкторов Boolean
, String
и Number
соответственно.
typeof true; //"boolean"
typeof new Boolean(true); //"object"
typeof "this is a string"; //"string"
typeof new String("this is a string"); //"object"
typeof 123; //"number"
typeof new Number(123); //"object"
Если примитивы не имеют свойств, почему "this is a string".length
возвращает значение?
Потому что JavaScript будет легко приводить между примитивами и объектами. В этом случае строковое значение приводится к строковому объекту для доступа к длине свойства. Строковый объект используется только в течение доли секунды, после чего он приносится в жертву богам сборки мусора - но в духе телевизионных открытий мы поймаем неуловимое существо и сохраним его для дальнейшего анализа…
Чтобы продемонстрировать это далее, рассмотрим следующий пример, в котором мы добавляем новое свойство в прототип конструктора String.
String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
Таким образом, примитивы имеют доступ ко всем свойствам (включая методы), определенным их соответствующими конструкторами объектов.
Итак, мы увидели, что примитивные типы будут соответствующим образом приводить к соответствующему объектному аналогу при необходимости.
Анализ метода toString()
Рассмотрим следующий код
var myObj = {lhs: 3, rhs: 2};
var myFunc = function(){}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString(); // "[object Object]"
myFunc.toString(); // "function(){}"
myString.toString(); // "This is a sample String"
myNumber.toString(); // "4"
myArray.toString(); // "2,3,5"
Как обсуждалось выше, в действительности, когда мы вызываем метод toString()
для примитивного типа, он должен быть приведен к своему аналогу объекта, прежде чем он сможет вызвать метод.
то есть myNumber.toString()
эквивалентно Number.prototype.toString.call(myNumber)
и аналогично для других примитивных типов.
Но что если вместо того, чтобы примитивный тип передавался в метод toString()
соответствующей ему функции-аналога конструктора Объекта, мы заставляем примитивный тип передаваться в качестве параметра в метод toString()
метода-конструктора Объекта (Object.prototype.toString.call(x)
)?
Присмотритесь к Object.prototype.toString()
Согласно документации,
Когда вызывается метод toString, предпринимаются следующие шаги:
-
Если значение
this
равно undefined
, верните "[object Undefined]"
.
- Если значение
this
равно null
, верните "[object Null]"
.
- Если это значение не указано выше, пусть
O
будет результатом вызова toObject
с передачей значения this
в качестве аргумента.
- Пусть class будет значением внутреннего свойства
[[Class]]
для O
.
- Возвращает значение String, являющееся результатом объединения трех строк
"[object "
, class
и "]"
.
Поймите это из следующего примера
var myObj = {lhs: 3, rhs: 2};
var myFunc = function(){}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
var myUndefined = undefined;
var myNull = null;
Object.prototype.toString.call(myObj); // "[object Object]"
Object.prototype.toString.call(myFunc); // "[object Function]"
Object.prototype.toString.call(myString); // "[object String]"
Object.prototype.toString.call(myNumber); // "[object Number]"
Object.prototype.toString.call(myArray); // "[object Array]"
Object.prototype.toString.call(myUndefined); // "[object Undefined]"
Object.prototype.toString.call(myNull); // "[object Null]"
Ссылки:https://es5.github.io/x15.2.html#x15.2.4.2
https://es5.github.io/x9.html#x9.9
https://javascriptweblog.wordpress.com/2010/09/27/the-secret-life-of-javascript-primitives/
Ответ 8
У вас есть объект javascript
$1
и $2
являются объектами jquery, возможно, используйте alert($1.text());
для получения текста или alert($1.attr('id');
и т.д....
вам нужно обрабатывать объекты $1
и $2
как объекты jQuery.
Ответ 9
Вы пытаетесь вернуть объект. Поскольку нет хорошего способа представить объект в виде строки, значение объекта .toString()
автоматически устанавливается как "[object Object]"
.