[object 对象] 是什么意思?

IT技术 javascript jquery object
2021-01-09 13:04:52

我试图提醒一个函数的返回值,我在警报中得到了这个:

[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 是我要检查的功能。

6个回答

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

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

  • 函数对象
    stringify(function (){})->[object Function]
  • 数组对象
    stringify([])->[object Array]
  • 正则表达式对象
    stringify(/x/)->[object RegExp]
  • 日期对象
    stringify(new Date)->[object Date]
  • ……还有几个……
  • Object 对象
    stringify({})->[object Object]

那是因为构造函数被调用Object(用大写的“O”),而术语“对象”(用小写的“o”)指的是事物的结构性质。

通常,当您在 Javascript 中谈论“对象”时,您实际上指的是对象对象”,而不是其他类型。

哪里stringify应该是这样的:

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

很好的解释!顺便说一句,JSON.stringify 不是这里使用的那个。
2021-03-10 13:04:52
为什么Object.prototype.toString.call(undefined)[object Undefined]
2021-03-10 13:04:52
术语加一 thingy
2021-03-27 13:04:52
如果 toString() 在自定义对象中没有被覆盖:根据文档15.2.4.2 Object.prototype.toString() # Ⓣ Ⓔ Ⓡ 当 toString 方法被调用时,将采取以下步骤: 如果 this 值未定义,则返回“ [对象未定义]”。如果 this 值为空,则返回“[object Null]”。让 O 成为调用 ToObject 并将 this 值作为参数传递的结果。令 class 为 O 的 [[Class]] 内部属性的值。返回字符串值,该值是连接三个字符串“[object”、class 和“]”的结果。
2021-03-28 13:04:52
你能否在顶部更明确地说明你的 stringify 函数,它不是JSON.stringify,有人可能会产生错误的印象。
2021-04-03 13:04:52

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

当您处理 jQuery 对象时,您可能想要做

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

打印元素的 ID。

正如评论中提到的,您应该使用 Firefox 或 Chrome 等浏览器中包含的工具通过执行console.log(whichIsVisible())而不是alert.

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

更一般地说,我会担心对象可能没有 id 属性;例如,如果您只使用像 $('.someStyleClass') 这样的 css 选择器就得到了一个对象列表。为了明确您正在处理的任何对象的身份,使用 jquery .data() 函数api.jquery.com/data分配您的对象元数据可能很有用或至少很有趣
2021-03-17 13:04:52
[在 HTML5 中,ID 可以以数字开头。]( whatwg.org/specs/web-apps/current-work/multipage/... )
2021-03-31 13:04:52

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

如果你想知道你的对象的属性,只需像这样 foreach :

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 中对象的默认 toString 表示。——这仍然不能解释它的来源。
2021-03-14 13:04:52

您可以像这样在 [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/

例如,您将如何访问 userDate.timezone,或者说 user.name 等?在我的程序中,如果我执行 JSON.stringify(object),显然我可以看到一切。当我尝试 console.log(object) 时,我得到 [Object object]...但是当我尝试 console.log(object.name) 时,我得到未定义。(JSON.stringify(object.name) 不起作用;我也未定义:()
2021-04-05 13:04:52

基本

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

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

在JavaScript中有7种基本类型:undefinednullbooleanstringnumberbigintsymbol其他一切都是对象。原始类型boolean,stringnumber可以由它们的对象对应物包装。这些对象的实例BooleanStringNumber分别构造。

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

通过这种方式,原语可以访问由它们各自的对象构造函数定义的所有属性(包括方法)。

所以我们看到原始类型会在需要时适当地强制转换为它们各自的 Object 对应物。

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()在原始类型上调用方法时,必须先将其强制转换为对应的对象,然后才能调用该方法。
ie与其他原始类型myNumber.toString()等效Number.prototype.toString.call(myNumber)并类似。

但是,如果不是将原始类型传递到toString()其对应的 Object 构造函数对应的方法中,而是强制将原始类型作为参数传递到toString()Object 函数构造函数 ( Object.prototype.toString.call(x)) 的方法中呢?

仔细看看 Object.prototype.toString()

根据文档,调用 toString 方法时,采取以下步骤:

  1. 如果this值为undefined,则返回"[object Undefined]"
  2. 如果this值为null,则返回"[object Null]"
  3. 如果此值不是上述任何一个,LetO是调用toObjectthis值作为参数传递的结果
  4. 让 class 是 的[[Class]]内部属性的值O
  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/