Javascript:在对象文本中调用函数

Javascript:在对象文本中调用函数,javascript,object-literal,Javascript,Object Literal,我正在学习用Javascript编程,希望得到一些帮助/澄清 我声明了一个包含动物名称的数组。我定义了一个用于将字符串一分为二的函数。然后我创建一个空的对象文字,并添加一个动物和相应的品种。我试图在对象文本中调用separateWords函数,但我需要一些澄清。这是我的密码: var myPets = ["Bengal Bobcat", "Beagle"]; var separateWords = function (string) { return string.split(" ")

我正在学习用Javascript编程,希望得到一些帮助/澄清

我声明了一个包含动物名称的数组。我定义了一个用于将字符串一分为二的函数。然后我创建一个空的对象文字,并添加一个动物和相应的品种。我试图在对象文本中调用separateWords函数,但我需要一些澄清。这是我的密码:

var myPets = ["Bengal Bobcat", "Beagle"];

var separateWords = function (string) {
    return string.split(" ");
};

var nameCollection = {};
nameCollection.cat = separateWords(myPets[0]);  
nameCollection.dog = myPets[1];
nameCollection.fish = null;
当我进入console.log(nameCollection)时,我得到以下信息:

Object {cat: Array[2], dog: “Beagle”, fish: null}
cat: Array[2]
0: "Bengal"
1: "Bobcat"
length: 2
但是,当我进入console.log(separateWords(myPets[0])时,我看到:


我不明白为什么cat的值显示为Array[2]

这就是javascript(和许多其他语言)的工作原理。当您尝试打印“nameCollection”时,javascript不会自动完成打印cat数组的良好工作。相反,它只是打印一些与类型相关的信息,在本例中表示“cat”是长度为2的数组。

这就是javascript(和许多其他语言)的工作方式。当您尝试打印“nameCollection”时,javascript不会自动完成打印cat数组的良好工作。相反,它只是打印一些与类型相关的信息,在本例中表示“cat”是长度为2的数组。

您将
separateWords()
函数调用的结果分配给
cat
,并将
myPets[0]
作为参数传递

separateWords()
返回一个数组,并使用
myPets[0]
输入返回一个新数组,其中
“Bengal”
“Bobcat”
值被空格分割


split()函数是使用拆分的值创建数组的函数,此结果由
separateWords()
函数返回,该函数也是分配给
cat
对象成员的值。

您正在分配给
cat
函数调用的结果,将myPets[0]作为参数传递

separateWords()
返回一个数组,并使用
myPets[0]
输入返回一个新数组,其中
“Bengal”
“Bobcat”
值被空格分割

split()函数是使用拆分的值创建数组的函数,此结果由
separateWords()
函数返回,该函数也是分配给
cat
对象成员的值。

String.prototype.split()返回一个数组,其中包含字符串中已拆分的两个值

String.prototype.split()返回一个数组,其中包含字符串中已拆分的两个值


控制台将其显示为数组[2],因为如果将其完全展开,它(可能)将无法读取。查看所有内容的一种方法是使用字符串化,该字符串递归地遍历对象中的每个项并调用它:

var myPets=[“孟加拉山猫”、“小猎犬”];
var separateWords=函数(字符串){
返回字符串。拆分(“”);
};
var namecolection={};
nameCollection.cat=separateWords(myPets[0]);
nameCollection.dog=myPets[1];
nameCollection.fish=null;

document.body.textContent=JSON.stringify(namecolection)控制台将其显示为数组[2],因为如果将其完全展开,它可能(可能)不可读。查看所有内容的一种方法是使用字符串化,该字符串递归地遍历对象中的每个项并调用它:

var myPets=[“孟加拉山猫”、“小猎犬”];
var separateWords=函数(字符串){
返回字符串。拆分(“”);
};
var namecolection={};
nameCollection.cat=separateWords(myPets[0]);
nameCollection.dog=myPets[1];
nameCollection.fish=null;

document.body.textContent=JSON.stringify(namecolection)每个浏览器都实现了自己想要的控制台

因此,您的浏览器决定实现您描述的行为


如果您不喜欢,请向此浏览器的开发人员提出一个更好的想法。或者使用其他浏览器。

每个浏览器都按照自己的意愿实现其控制台

因此,您的浏览器决定实现您描述的行为


如果您不喜欢,请向此浏览器的开发人员提出一个更好的想法。或者使用其他浏览器。

我假设您使用的是Chrome开发者工具或Firebug

开发人员工具将数组和对象压缩为易于阅读的行,然后使用这些行进行进一步检查。我的意思是,按下控制台日志中每一行旁边的小箭头,进一步检查每个对象。我将用图片来解释这一点

在这里,我指定一个数组,然后将对象中的一个元素指定给该数组,如下所示:

正如我记录对象时看到的,它显示的是一个数组[2],而不是展开数组。在下一张图片中,我将展开阵列以检查它


这到底是为什么?我的第一个想法是易于阅读。如果您有一个复杂的应用程序,并且有许多调试控制台日志,那么您可以在单行上查看所有日志,从而更容易查找特定日志。同样,如果您有一个非常大且复杂的对象,可以说读取每行上的所有根元素更容易,而无需递归扩展该对象中的所有对象和数组。

我假设您使用的是Chrome Developer工具或Firebug

开发人员工具将数组和对象压缩为易于阅读的行,然后使用这些行进行进一步检查。我的意思是,按下控制台日志中每一行旁边的小箭头,进一步检查每个对象。我将用图片来解释这一点

在这里,我指定一个数组,然后将对象中的一个元素指定给该数组,如下所示:

正如我记录对象时看到的,它显示的是一个数组[2],而不是展开数组。在下一张图片中,我将展开阵列以检查它

这到底是为什么?我的第一个想法是易于阅读。如果你
[“Bengal”, “Bobcat”]
nameCollection.cat = separateWords(myPets[0])[0]; // nameCollection.cat == Bengal
nameCollection.cat = separateWords(myPets[0])[1]; // nameCollection.cat == Bobcat