【问题标题】:Are Javascript string arrays automatically separated by commas?Javascript字符串数组是否自动用逗号分隔?
【发布时间】:2012-04-25 20:31:27
【问题描述】:

看完this discussionthis article,我还是有这个疑问。假设我有以下 sn-p:

var arr = new Array(3);
arr[0] = "Zero";
arr[1] = "One";
arr[2] = "Two";

document.write(arr.join(","));

如果我将document.write() 行替换为document.write(arr);,它们是否等效?替换语句是否自动以逗号作为分隔符连接数组元素?

提前致谢!

【问题讨论】:

  • 为什么不自己试试呢?
  • 它们看起来一样,但我不知道为什么。
  • 等效是什么意思?你的意思是它们在输出到浏览器时看起来是一样的吗?
  • 输出在浏览器看来是一样的。但我不知道为什么。

标签: javascript


【解决方案1】:

“但我不知道为什么”

这是因为所有东西都有一个toString 函数作为其原型的一部分。当你把它写出来时,这个函数被调用来获取它的字符串表示形式。对于数组,默认处理方式与join相同。

Array.prototype.toString.apply([1,2,3]) == Array.prototype.join.apply([1,2,3])
> true

【讨论】:

    【解决方案2】:

    将数组传递给 document.write() 将默认用逗号分隔它们。

    http://jsfiddle.net/XnW7V/

    var arr = new Array(3);
    arr[0] = "Zero";
    arr[1] = "One";
    arr[2] = "Two";
    
    document.write(arr); //outputs Zero,One,Two
    

    【讨论】:

    • 所以默认用逗号分隔?
    • 逗号作为格式的一部分添加。该数组实际上没有逗号。如果您在内存中查看,每个包含不带逗号的值的元素都会有一个插槽。我猜 document.write() 函数中有一些条件逻辑,它决定了作为参数传递的内容,如果它是一个数组,它必须用逗号将它们连接起来并吐出结果。
    • 我的意思是根据 Javascript 标准默认添加逗号用于格式化目的吗?
    • 我不知道规范是否说明了这一点,但显然这是该方法的功能。
    猜你喜欢
    • 2020-12-04
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2017-01-05
    相关资源
    最近更新 更多