【问题标题】:Curious behavior of String()String() 的奇怪行为
【发布时间】:2021-09-23 08:39:33
【问题描述】:

我今天只是在搞乱一些代码,我注意到当我运行String(null)String(undefined) 时,我分别得到nullundefined。但是,当我检查我得到的String([null, undefined]) 的值时,我发现它给了我"," 与预期的结果null,undefined 相比。有谁知道为什么会这样?由于我没想到 String 构造函数在数组上会出现这种行为,因为据我所知,构造函数只是将每个元素的值用逗号分隔。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    String(x) calls x.toString().

    nullundefined 值由Arrays' toString() 的空字符串表示,因为它调用Array.prototype.join()(“如果元素未定义或为空,则让next 为空字符串”):

    > [null, undefined].toString()
    ","
    > [null, null, null, null].toString()
    ",,,"
    

    【讨论】:

    • 啊,明白了。这意味着<Array>.toString 不像我想象的那样工作。感谢您的澄清!当我的计时器结束时,我会接受这个答案,也就是 11 分钟
    • 这实际上是调用join()Array#toString() 方法的工件,它将undefinednull 和空数组[] 强制转换为空字符串。请参阅:joinspec
    • @pilchard 谢谢,我也把它折叠成答案了!
    【解决方案2】:

    你可以使用:

    String([null, undefined].map(String));
    

    [null, undefined].map(String).join()
    

    【讨论】:

      猜你喜欢
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多