是什么意思?

我试图提醒一个函数返回值,我得到这个警报

[对象对象]

这里是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是我正在试图检查的function

从一个对象到string的默认转换是"[object Object]"

正如你正在处理的jQuery对象,你可能想要做的

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

打印元素的ID。

正如在评论中提到的,你应该使用Firebug for Firefox等额外的工具,通过使用console.log(whichIsVisible())而不是alert (无需Chrome或Safari中的额外工具console.log(whichIsVisible())来反思对象。

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

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

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

  • function对象
    stringify(function (){}) – > [object Function]
  • 数组对象
    stringify([]) – > [object Array]
  • RegExp对象
    stringify(/x/) – > [object RegExp]
  • date对象
    stringify(new Date) – > [object Date]
  • … 几个 …
  • Object对象
    stringify({}) – > [object Object]

这是因为构造函数称为Object (大写“O”),而“object”(小“o”)这个术语是指这个东西的结构性质。

通常,当你谈到Javascript中的“对象”时,你实际上是指 “对象对象”,而不是其他types。

stringify应该看起来像这样:
function stringify (x) { console.log(Object.prototype.toString.call(x)); }

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


我明白你想要做什么,因为我昨天回答了你的问题 ,确定哪个div是可见的。 🙂
whichIsVisible()函数返回一个实际的jQuery对象,因为我认为这将在程序上更有用。 如果你想用这个函数进行debugging,你可以这样做:

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

也就是说,如果你想debugging一个问题,你应该使用适当的debugging器而不是alert() 。 如果你使用Firefox, Firebug非常棒。 如果您使用的是IE8,Safari或Chrome,则它们具有内置的debugging器。

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

如果你想知道你的对象的属性,只是这样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 Object的默认string表示forms。 这是你会得到,如果你运行这个代码:

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

您可以通过覆盖toString方法来更改默认的表示forms,如下所示:

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

你有一个JavaScript对象

$1$2是jquery对象,也许使用alert($1.text()); 获得文本或alert($1.attr('id');等等…

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