我正在尝试从函数中提醒返回的值,并在警报
中获取此值[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是我试图检查的功能
答案 0 :(得分:91)
正如其他人所说,这是对象的默认序列化。但为什么它[object Object]
而不只是[object]
?
那是因为Javascript中有不同类型的对象!
stringify(function (){})
- &gt; [object Function]
stringify([])
- &gt; [object Array]
stringify(/x/)
- &gt; [object RegExp]
stringify(new Date)
- &gt; [object Date]
stringify({})
- &gt; [object Object]
那是因为构造函数被称为Object
(带有大写“O”),而术语“对象”(带有小“o”)则指的是该东西的结构性质。
通常,当您在Javascript中讨论“对象”时,实际上意味着“对象”,而不是其他类型。
stringify
应该如下所示:
function stringify (x) {
console.log(Object.prototype.toString.call(x));
}
答案 1 :(得分:39)
从对象到字符串的默认转换为"[object Object]"
。
在处理jQuery对象时,您可能想要
alert(whichIsVisible()[0].id);
打印元素的ID。
正如评论中所提到的,您应该使用Firefox或Chrome等浏览器中包含的工具,通过console.log(whichIsVisible())
代替alert
来反省对象。
Sidenote :ID不应以数字开头。
答案 2 :(得分:18)
[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。
答案 3 :(得分:11)
该对象的toString()
函数返回的值。
我明白你要做什么,因为我回答your question yesterday关于确定哪个div可见。 :)
whichIsVisible()
函数返回一个实际的jQuery对象,因为我认为这将更加以编程方式有用。如果要将此函数用于调试目的,可以执行以下操作:
function whichIsVisible_v2()
{
if (!$1.is(':hidden')) return '#1';
if (!$2.is(':hidden')) return '#2';
}
那就是说,如果您正在尝试调试问题,那么确实应该使用正确的调试器而不是alert()
。如果您使用的是Firefox,Firebug非常棒。如果您使用的是IE8,Safari或Chrome,则它们具有内置调试程序。
答案 4 :(得分:5)
您可以在[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) );
参考
答案 5 :(得分:4)
[object Object]
是JavaScript Object
的默认字符串表示形式。如果您运行此代码,这将是您得到的:
alert({}); // [object Object]
您可以通过覆盖toString
方法来更改默认表示,如下所示:
var o = {toString: function(){ return "foo" }};
alert(o); // foo
答案 6 :(得分:4)
基础
您可能不知道,但是在JavaScript中,每当我们与字符串,数字或布尔基元进行交互时,我们都会进入对象阴影和强制的隐藏世界。
字符串,数字,布尔值,null,未定义和符号。
在JavaScript中,有7种原始类型:undefined
,null
,boolean
,string
,number
,bigint
和{{1 }}。其他一切都是对象。基本类型symbol
,boolean
和string
可以由它们的对象对应物包装。这些对象分别是number
,Boolean
和String
构造函数的实例。
Number
如果原语没有属性,为什么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"
返回一个值?
因为JavaScript会很容易在基元和对象之间强制转换。在这种情况下,字符串值被强制转换为字符串对象,以便访问属性长度。字符串对象仅用了不到一秒钟的时间,之后便被献给了垃圾收集之神–但是,根据电视发现节目的精神,我们将捕获这种难以捉摸的生物并将其保存以备进一步分析……
为进一步说明这一点,请考虑以下示例,其中我们向String构造函数原型添加了一个新属性。
"this is a string".length
这意味着基元可以访问其各自的对象构造函数定义的所有属性(包括方法)。
因此,我们看到了基本类型将在需要时适当地强制转换为它们各自的Object对应对象。
对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()
,其他基本类型也是如此。
但是,如果不是将原始类型传递到其对应的Object构造函数的对应对象的Number.prototype.toString.call(myNumber)
方法中,而是强制将原始类型作为参数传递到Object函数构造函数的toString()
方法({ {1}})?
仔细研究Object.prototype.toString()
根据documentation, 调用toString方法时,将执行以下步骤:
- 如果
toString()
的值为Object.prototype.toString.call(x)
,则返回this
。- 如果
undefined
的值为"[object Undefined]"
,则返回this
。- 如果该值不是以上所有值,则使
null
为调用toObject
并传递"[object Null]"
值作为参数的结果。- 让class为
O
的{{1}}内部属性的值。- 返回字符串值,该值是将三个字符串
this
,[[Class]]
和O
串联而成的。
从以下示例中了解这一点
"[object "
参考: 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/
答案 7 :(得分:2)
你有一个javascript对象
$1
和$2
是jquery对象,可能使用alert($1.text());
来获取文字或alert($1.attr('id');
等等。
你必须像jQuery对象一样对待$1
和$2
。
答案 8 :(得分:0)
您正在尝试返回一个对象。因为没有很好的方法将对象表示为字符串,所以对象的.toString()
值会自动设置为"[object Object]"
。
答案 9 :(得分:0)
我认为最好的出路是使用JSON.stringify()
并将数据作为参数传递:
alert(JSON.stringify(whichIsVisible()));
答案 10 :(得分:0)
请考虑以下示例:
const foo = {};
foo[Symbol.toStringTag] = "bar";
console.log("" + foo);
哪个输出
[object bar]
基本上,javascript中的任何对象都可以使用标签Symbol.toStringTag
定义属性并覆盖输出。
使用“ toString”方法在javascript原型中从某个对象的后台构造一个新对象。默认对象将此方法作为属性提供,并且该方法在内部调用标记以确定如何将对象强制转换为字符串。如果存在标签,则使用该标签;如果缺少标签,则会得到"Object"
。
您应该设置Symbol.toStringTag
吗?也许。但是,依靠字符串始终是[object Object]
作为“真实”对象并不是最好的主意。
答案 11 :(得分:0)
类为 Object 的对象似乎与通常的类实例对象有很大不同,因为它的作用就像一个关联数组或列表:它可以由简单的对象字面量(键和属性的列表)创建,如下所示:{ {1}} 并且因为它在 Developer Tools Console 窗格中显示以及转换为 JSON 字符串时看起来非常像相同的文字表示法。
但是,实际上,其他类的对象(从Object派生或扩展)唯一真正的区别在于,其他类通常除了属性(它们是变量)之外,还有构造函数和方法(这些都是函数) )。使用“new”运算符分配类实例对象,其属性和方法可通过“this”变量访问。您还可以使用 'prototype' 属性访问复制到每个新实例的底层静态函数,甚至可以通过向原型对象添加新函数来扩展系统类。
Array 对象也派生自 Object 并且经常使用:它是一个有序的、0 索引的变量值数组。
对象对象,与数组不同,其他类被简单地视为关联数组(有时被认为是有序的,有时被认为是无序的)。