是什么意思?
我试图提醒一个函数返回值,我得到这个警报
[对象对象]
这里是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
。