[对象对象]是什么意思?

我试图警告一个函数返回的值,我得到了这个警告:

[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是我正在尝试检查的函数。

472184 次浏览

它是该对象的 toString()函数返回的值。


我理解您想要做什么,因为我回答了 你昨天的问题关于确定哪个 div 是可见的。 :)
whichIsVisible()函数返回一个实际的 jQuery 对象,因为我认为这将是更有用的 程序化。如果希望将此函数用于调试目的,只需执行以下操作:

function whichIsVisible_v2()
{
if (!$1.is(':hidden')) return '#1';
if (!$2.is(':hidden')) return '#2';
}

也就是说,如果您试图调试一个问题,您使用的是 真的应该使用一个合适的调试器而不是 alert()。如果你使用的是 Firefox,那么 纵火犯非常棒。如果你正在使用 IE8,Safari 或 Chrome,他们有内置的调试器。

从对象到字符串的默认转换为 "[object Object]"

在处理 jQuery 对象时,可能需要这样做

alert(whichIsVisible()[0].id);

打印元素的 ID。

正如评论中提到的,你应该使用像 Firefox 或 Chrome 这样的浏览器中包含的工具,通过执行 console.log(whichIsVisible())而不是 alert来自省对象。

旁注 : ID 不应以数字开头。

[object Object]是 javascript 中对象的默认 toString 表示形式。

如果你想知道你的物体的属性,只需要像这样覆盖它:

for(var property in obj) {
alert(property + "=" + obj[property]);
}

在您的特殊情况下,您将得到一个 jQuery 对象:

$('#senddvd').click(function ()
{
alert('hello');
var a=whichIsVisible();
alert(whichIsVisible().attr("id"));
});

这将警告可见元素的 id。

[object Object]是 JavaScript Object的默认字符串表示形式:

alert({}); // [object Object]

您可以通过重写 toString方法来更改默认表示形式,如下所示:

var o = {toString: function(){ return "foo" }};
alert(o); // foo

您有一个 javascript 对象

$1$2是 jquery 对象,可以使用 alert($1.text());获取文本或者 alert($1.attr('id');等。

你必须像对待 jQuery 对象一样对待 $1$2

正如其他人所指出的,这是对象的默认序列化。但是为什么是 [object Object]而不仅仅是 [object]呢?

这是因为在 Javascript 中有不同类型的对象!

  • 函数对象 :
    - > [object Function]
  • 数组对象 :
    - > [object Array]
  • RegExp 对象
    - > [object RegExp]
  • 日期对象
    - > [object Date]
  • ... 还有几个...
  • 还有 物体
    - > [object Object]

这是因为构造函数被称为 Object(大写字母“ O”) ,术语“ object”(小写字母“ o”)指的是事物的结构性质。

通常,当你在谈论 Javascript 中的“对象”时,你实际上是 刻薄物体”,而不是其他类型。

stringify应该是这样的:

function stringify (x) {
console.log(Object.prototype.toString.call(x));
}

您可以像这样看到[ Object Object ]中的值

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/

您试图返回一个对象。因为没有好的方法将对象表示为字符串,所以对象的 .toString()值自动设置为 "[object Object]"

基本知识

你可能不知道,但是在 JavaScript 中,每当我们与字符串、数字或布尔原语交互时,我们就进入了一个隐藏的对象阴影和强制的世界。

字符串、数字、布尔值、空、未定义和符号。

在 JavaScript 中有7种基本类型: undefinednullbooleanstringnumberbigintsymbol。其他的都是物体。基元类型 booleanstringnumber可以由它们的对应对象进行包装。这些对象分别是 null0、 null1和 null2构造函数的实例。

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),对于其他基元类型也是如此。

但是,如果不将原语类型传递给对应的 Object 函数构造函数的 toString()方法,而是强制将原语类型作为参数传递给 Object 函数构造函数(Object.prototype.toString.call(x))的 toString()方法,会怎么样呢?

仔细查看 Object.Prototype.toString ()

根据 文件, 调用 toString 方法时,将执行以下步骤:

  1. 如果 this值为 undefined,则返回 "[object Undefined]"
  2. 如果 this值为 null,则返回 "[object Null]"
  3. 如果这个值不是上面的值,那么让 O作为将 this值作为参数传递给 toObject调用的结果。
  4. 让 class 为 O[[Class]]内部属性的值。
  5. 返回串联三个字符串 "[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/

我认为最好的解决办法是使用 JSON.stringify()并将数据作为参数传递:

alert(JSON.stringify(whichIsVisible()));

考虑下面的例子:

const foo = {};
foo[Symbol.toStringTag] = "bar";
console.log("" + foo);

输出

[object bar]

基本上,javascript 中的任何对象都可以定义带有标记 Symbol.toStringTag的属性并覆盖输出。

使用“ toString”方法从某个对象在 javascript 原型中构造新对象的幕后。默认对象将此方法作为属性提供,该方法在内部调用标记以确定如何将对象强制为字符串。如果标记存在,则使用它,如果丢失,则获得 "Object"

你应该设置 Symbol.toStringTag吗?也许吧。但是依赖字符串始终是 [object Object]来表示“真正的”对象并不是最好的方法。

类为 Object 的对象看起来与通常的类实例对象有很大的不同,因为它的作用类似于一个关联数组或列表,它可以通过简单的对象文本(键和属性的列表)创建,像这样: let obj={A:'a',B:'b'};,还因为它看起来非常像这个文本符号,当它显示在开发人员工具控制台窗格中时,当它被转换为一个 JSON 字符串时。

但是,事实上,其他类的对象(从 Object 派生或扩展的)唯一真正的区别是,除了属性(变量)之外,其他类通常还有构造函数和方法(这些都是函数)。使用“ new”运算符分配类实例对象,并且可以通过“ this”变量访问它的属性和方法。您还可以使用“原型”属性访问被复制到每个新实例的底层静态函数,甚至可以通过向其原型对象添加新函数来扩展系统类。

Array 对象也是从 Object 派生出来的,并且经常使用: 它是一个有序的、0索引的变量值数组。

与 Array 和其他类不同,对象对象被简单地视为关联数组(有时被认为是有序的,有时被认为是无序的)。