在javascript中,array = []是否等于array = [[]]?如果没有,为什么会这样呢?

时间:2014-01-14 21:09:46

标签: javascript arrays google-apps-script

我有这个功能:

function addToArray() {
  var thesesArrays = []; // an empty array
  var sometheses = ["With I/O Speech, Larry Page Reminds Us Why Google Rules Tech", "Tech", "myID_xGr52srsiwi"];
  thesesArrays.push(sometheses); // the empty array gains one array
  Logger.log("thesesArrays[0][1] = " + thesesArrays[0]);  
  Logger.log("thesesArrays = " + thesesArrays); 
}

我是JS编程(以及一般编程)的新手,所以它看起来像一个非常新手的问题。为什么thesesArrays[0][1]thesesArrays的日志完全相同?

enter image description here

thesesArrays日志不应该是这样的:[["With I/O Speech, Larry Page Reminds Us Why Google Rules Tech", "Tech", "myID_xGr52srsiwi"]]

4 个答案:

答案 0 :(得分:2)

您对它们应该如何理解是正确的。

在JavaScript中,扩展本机Object类型的对象具有toString()方法,该方法旨在将该实例表示为String。碰巧的是,当您在数组上调用toString()时,您将获得数组元素的所有toString()值,并在它们之间放置逗号。

在您第一次打电话给Logger.log()时,您将其传递给内存中的内容:

["With I/O Speech, Larry Page Reminds Us Why Google Rules Tech", "Tech", "myID_xGr52srsiwi"]

如果您在此阵列上调用toString(),则会收到字符串:

"With I/O Speech, Larry Page Reminds Us Why Google Rules Tech,Tech,myID_xGr52srsiwi"

在所有元素上调用toString()的结果是什么(因为字符串而自行返回),然后在其间添加,

在第二次调用中,您提供包含数组thesesArrays。这里适用相同的逻辑,因为它递归地遵循与上述相同的逻辑,但因为Array中只有一个元素(它本身是Array),所以不需要分隔逗号。 / p>

为了证明这一点,让我们将另一个数组添加到父数组thesesArrays

thesesArrays.push('my second array'.split(' '))

现在,如果您在toString()上致电thesesArrays,您会看到我们的新数组已添加到最后,以逗号分隔:

"With I/O Speech, Larry Page Reminds Us Why Google Rules Tech,Tech,myID_xGr52srsiwi,my,second,array"

供参考:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString

答案 1 :(得分:1)

阵列不相等。 Example。在我的示例中,如果您查看javascript控制台,您将看到一个记录一个数组的Array [1]。另一个记录了3个字符串的数组[3]。

当您将数组添加到日志中预先存在的字符串时,您似乎正在将数组转换为字符串。这两个阵列转换为字符串是相同的。

答案 2 :(得分:1)

数组不一样,但是它们的字符串表示是。当一个数组在Javascript中转换为一个String时,'['和']'(反直觉地)不包括在内。

请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString

答案 3 :(得分:0)

您没有将theseArrays[0]theseArrays进行比较,而是查看记录器中输出的字符串。通过在对象之前添加一些标签来创建字符串。

这不是比较对象的可靠方法。至少尝试比较运算符,你会发现对象是不同的。

问题源于+试图变得聪明的事实,如果要向数组中添加字符串,Javascript会将数组转换为字符串:

var tab = ["a", "b"];

console.log( tab );
console.log( "a" + tab );

输出

["a", "b"]
aa,b