Javascript 函数返回“[对象对象]”而不是哈希

Javascript function returning '[object Object]' instead of hash

本文关键字:对象 哈希 返回 Javascript 函数      更新时间:2023-09-26

>我有一个函数来挑选输入名称的各个部分:

  function getNameParts(list) {
    first_name = list[0];
    middle_name = "";
    last_name = list[1];
    if(list.length > 2) {
      middle_name = list[1];
      last_name = list[2];
    }
    names = {"first": first_name, "middle": middle_name, "last": last_name};
    console.log("names", names)
    return names
  }

控制台声明names是此函数中的哈希。

但是当我像这样使用这个函数时:

name = getNameParts($("#person_name").val().split(' '));
console.log("name", name)

name是一个字符串"[对象对象]"

这是怎么回事?

使用 JSON.stringify()

console.log('names', JSON.stringify(names));

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

试试这个;

function getNameParts(list) {
    var first_name = list[0];
   var middle_name = "";
    var last_name = list[1];
    if(list.length > 2) {
      middle_name = list[1];
      last_name = list[2];
    }
    var names = {"first": first_name, "middle": middle_name, "last": last_name};
    console.log("names", names)
    return names
  }

声明名称变量

var name = getNameParts($("#person_name").val().split(' '));
console.log("name", name)

它真的是一个字符串吗?从函数返回一个对象。

请尝试以下示例:

name = getNameParts($("#person_name").val().split(' '));
console.log("first", name.first);
console.log("middle", name.middle);
console.log("last", name.last);

您可以访问每个属性值。当您尝试将整个对象解析为字符串时,它会按预期返回"[对象对象]"。

>name不是字符串。它是一个对象,因此当您在控制台中记录此值而不是理想地显示对象的内容时,它会显示它的类型是控制台。

要验证这一点,您可以在其中记录names.first或任何其他属性

name是一个对象,但是当您使用特定于供应商的console.log函数时,它可能会尝试将其参数强制为字符串,具体取决于此特定环境程序员如何实现它。 Object 的默认字符串化方法是返回 [object Object] ,这正是你得到的。

看看这个,它似乎工作得很好:

 $(document).ready(function() {
      function getNameParts(list) {
            var first_name = list[0],
                middle_name = "",
                last_name = list[1],
                names;
            if(list.length > 2) {
                middle_name = list[1];
                last_name = list[2];
            }
            names = {"first": first_name, "middle": middle_name, "last": last_name};
            console.log(names)
            return names;
        }
        var testString = "aaa bbb ccc";
        var name = getNameParts(testString.split(' '));
        console.log(name);
        console.log(name.first + " " + name.middle + " " + name.last);
   });

当你做控制台.log时,如果你做控制台.log("名称"+名称)并且名称是一个对象,它将显示名称的类型是[对象对象]而不是它的内容。对于字符串和数字可以这样做。