Javascript JS警报显示';未定义';

Javascript JS警报显示';未定义';,javascript,Javascript,你好, 昨晚我刚从C#/C++转到JavaScript,我很喜欢它 我刚刚遇到了一些我不理解的行为,想知道是否有人能解释一下 当我调用这个脚本时,我得到了显示“5.5”的预期警报框,但是在该框关闭后,我得到了另一个显示“未定义”的警报,有人能解释一下吗 下面的代码: var myObj = { age : 5, weight : 5.5, toString : function(){ alert(this.weight); } } alert(myObj.toString());

你好,

昨晚我刚从C#/C++转到JavaScript,我很喜欢它

我刚刚遇到了一些我不理解的行为,想知道是否有人能解释一下

当我调用这个脚本时,我得到了显示“5.5”的预期警报框,但是在该框关闭后,我得到了另一个显示“未定义”的警报,有人能解释一下吗

下面的代码:

var myObj = {

age : 5,
weight : 5.5,

toString : function(){
    alert(this.weight);
}

}

alert(myObj.toString());

非常感谢

您的代码调用了
alert()
两次

第一个警报显示
此.weight
。但是,第二个显示从
myObj.toString()
函数返回的任何值,并且由于您对该函数进行编码时没有显式返回值,因此默认情况下它返回
未定义的

通常,
.toString()
函数实际上会返回一个字符串,因此您应该执行以下操作:

toString : function(){
    return this.weight.toString();
}
然后您将得到一个警报,如下所示:

实际上,你可以简单地使用:

alert(myObj);

…因为您的自定义
.toString()
将被自动调用。

您的代码将调用
警报()
两次

第一个警报显示
此.weight
。但是,第二个显示从
myObj.toString()
函数返回的任何值,并且由于您对该函数进行编码时没有显式返回值,因此默认情况下它返回
未定义的

通常,
.toString()
函数实际上会返回一个字符串,因此您应该执行以下操作:

toString : function(){
    return this.weight.toString();
}
然后您将得到一个警报,如下所示:

实际上,你可以简单地使用:

alert(myObj);

…因为您的自定义
.toString()
将被自动调用。

您的代码中有两个
alert()
函数这一事实可能暗示了为什么会有两个
alert
框;)问题不是为什么我有两个警报。。。这就是为什么第二个显示未定义,现在已经回答了。非常感谢您的代码中有两个
alert()
函数这一事实可能暗示了为什么会有两个
alert
框;)问题不是为什么我有两个警报。。。这就是为什么第二个显示未定义,现在已经回答了。非常感谢你!我最初只是打电话给myObj,没想到它会自动呼叫我的toString!谢谢你指出返回lol,没有定义类型就有点太过兴奋了哈哈!当答案可用时将接受。不客气。关于不必定义类型,请记住JS实际上有不同的类型,例如字符串、数字、对象-只是任何变量都可以包含任何类型的值。是的,我知道它们在运行时被解释,这很好!不过还是喜欢强类型。谢谢!我最初只是打电话给myObj,没想到它会自动呼叫我的toString!谢谢你指出返回lol,没有定义类型就有点太过兴奋了哈哈!当答案可用时将接受。不客气。关于不必定义类型,请记住JS实际上有不同的类型,例如字符串、数字、对象-只是任何变量都可以包含任何类型的值。是的,我知道它们在运行时被解释,这很好!不过还是喜欢强类型。