[object Object]是什么意思?

Pra*_*ady 96 javascript jquery

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

[对象]

这是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>
Run Code Online (Sandbox Code Playgroud)

whichIsVisible是我试图检查的功能

use*_*621 107

正如其他人所说,这是对象的默认序列化.但为什么[object Object]不是这样[object]呢?

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

  • 功能对象:
    stringify(function (){})- >[object Function]
  • 数组对象:
    stringify([])- >[object Array]
  • RegExp对象
    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));
}
Run Code Online (Sandbox Code Playgroud)

  • 加上一个用于`thingy`的术语 (4认同)
  • 很好的解释!顺便说一句,JSON.stringify 不是这里使用的那个。 (2认同)

Fel*_*ing 41

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

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

alert(whichIsVisible()[0].id);
Run Code Online (Sandbox Code Playgroud)

打印元素的ID.

正如评论中所提到的,您应该使用Firefox或Chrome等浏览器中包含的工具来反省console.log(whichIsVisible())内容alert.

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

  • [在 HTML5 中,ID 可以以数字开头。](http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#the-id-attribute) (3认同)

ale*_*exn 20

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

如果你想知道对象的属性,可以像这样预先知道它:

for(var property in obj) {
    alert(property + "=" + obj[property]);
}
Run Code Online (Sandbox Code Playgroud)

在您的特定情况下,您将获得一个jQuery对象.尝试这样做:

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

这应该警告可见元素的id.


Him*_*nsh 14

基本

你可能不知道,但在 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"
Run Code Online (Sandbox Code Playgroud)

如果基元没有属性,为什么要"this is a string".length返回值?

因为 JavaScript 很容易在原语和对象之间进行强制转换。在这种情况下,字符串值被强制转换为字符串对象以访问属性长度。字符串对象只使用了几分之一秒,之后它会被献给垃圾收集之神——但本着电视发现节目的精神,我们将捕获这个难以捉摸的生物并保存它以供进一步分析......

为了进一步说明这一点,请考虑以下示例,其中我们向 String 构造函数原型添加了一个新属性。

String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty;            // 5
Run Code Online (Sandbox Code Playgroud)

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

所以我们看到原始类型会在需要时适当地强制转换为它们各自的 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"
Run Code Online (Sandbox Code Playgroud)

如上所述,真正发生的是当我们调用 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. 如果此值不是上述值,则为O调用结果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]"
Run Code Online (Sandbox Code Playgroud)

参考资料: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/


Mat*_*all 11

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


我明白你要做什么,因为我昨天回答了你的问题,即确定哪个div是可见的.:)
whichIsVisible()函数返回一个实际的jQuery对象,因为我认为这将在程序上更有用.如果要将此函数用于调试目的,可以执行以下操作:

function whichIsVisible_v2()
{
    if (!$1.is(':hidden')) return '#1';
    if (!$2.is(':hidden')) return '#2';
}
Run Code Online (Sandbox Code Playgroud)

也就是说,你真的应该使用一个合适的调试器而不是alert()你正在尝试调试问题.如果您使用的是Firefox,Firebug非常棒.如果您使用的是IE8,Safari或Chrome,则它们具有内置调试程序.


Ryo*_*awa 6

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

Alert.alert(  JSON.stringify(userDate)  );
Run Code Online (Sandbox Code Playgroud)

这样尝试

    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)  );
Run Code Online (Sandbox Code Playgroud)

参考

https://off.tokyo/blog/react-native-object-object/