【问题标题】:What is the JSLint approved way to convert a number to a string?JSLint 认可的将数字转换为字符串的方法是什么?
【发布时间】:2011-08-14 21:12:33
【问题描述】:

我总是通过向它们添加一个空字符串来将数字转换为字符串:

var string = 1 + '';

然而,JSLint 用Expected 'String' and instead saw ''''. 抱怨这种方法,而且看起来确实有点难看。

有没有更好的办法?

【问题讨论】:

  • 我检查了它说它有效
  • 在 jslint.com 上试试,它在那里失败了。我正在使用 JSLint 边缘。
  • 在 jslint.com 上也失败了。这是一个 jslint 边缘错误吗?
  • @Samuel Cole 然后报告一个错误。我不使用 jslint,因为我强烈反对它。它(问题中发布的)是完全有效的 Javascript。不要被其他人的心血来潮束缚。
  • 哈,感谢@pst 的验证。在我开始提交错误之前,我只是想知道是否有合理的解释。

标签: javascript jslint


【解决方案1】:

我相信JSLint认可的方式是在号码上拨打.toString()

var stringified = 1..toString();
// Note the use of the double .. to ensure the the interpreter knows 
// that we are calling the toString method on a number -- 
// not courting a syntax error.
// You could also theoretically call 1["toString"];

【讨论】:

  • 这就是票。 1.toString() 由于这个原因在控制台中失败了。
  • (1).toString() 可以,String(1) 也可以,此外,转换是隐式完成的,例如'duck'+1(JsLint 批准)。 JsLint 只不同意添加一个空字符串,这在某种程度上是有道理的:为什么有人会这样做var ducked = 'duck'+''
【解决方案2】:

(抱歉,在上面的评论中这样说可能会更好,但我还没有获得发布 cmets 的权利,所以......)

请记住,jslint 不仅仅是验证您的 JavaScript 是否会真正运行,它还试图强制执行编码风格,目的是帮助您生成更具可读性和可维护性的代码。

所以1 + '' 有效,但不一定是每个人最易读的选项,而显式转换选项(请参阅其他答案)应该对每个人都可读。当然,如果没有其他人会看到你的代码,你只需要担心下个月或明年再看你是否能够理解它......

不要忘记以下两个语句不会产生相同的结果:

var s1 = 1 + 3 + ''; // gives '4'
var s2 = '' + 1 + 3; // gives '13'

我认为1 + '' 只是为了简化讨论,或者为什么不首先使用'1'

【讨论】:

  • 我实际上有 3 个整数要组合成一个字符串(如在 s2 中) - 最好的方法是什么?
  • @DanielG。 result = '' + 1 + 2 + 3; 将产生字符串 '123'。你可以用同样的方法连接变量。
  • 当然,这就是我目前正在做的事情 - 但这不是“Lint-Valid”。 :)
【解决方案3】:

您可以像这样使用.toString() 方法:

var num = 1;
var str = num.toString();

【讨论】:

    【解决方案4】:

    还有(至少在 Chrome 中):String(1) 没有 new

    var n = 1, s = String(n);
    

    【讨论】:

      【解决方案5】:

      我会说“错误”或“错误功能”

      科尔考虑一下

      var x = "foobar" + 1;
      

      是“批准”的 jslint。在任何情况下,它都是 100% 有效的 Javascript。

      编码愉快。


      评论:

      这就是为什么我更喜欢使用字符串文字作为第一个操作数,因为这表明了意图——了解一种语言是使用一种语言的基础。

      鸭子类型的唯一问题(在这种情况下)是a + b 形式的表达式,其中都不是字符串文字。在这种情况下,a(或b)可能会计算为一个字符串,而它预期会计算为一个数字(这将触发字符串连接与预期的数字相加)。如果任何操作数是字符串文字,则意图是明确定义/描述的。

      然而,这个特殊的“问题”并没有出现在发布的代码中;在字符串文字上使用 toString 也不会消除它。

      【讨论】:

      • 是的,但是 1 + '' 很难看。它实际上并没有描述我们想要什么,它只是作为鸭子打字的巧合
      • 当然,但正如另一个答案中提到的那样,1..toString() 不是更清楚吗?
      • @Samuel Cole 不适合我。为什么会呢?我也喜欢/利用这样一个事实,即我可以做"" + x,并且在 x 为空或未定义时不会爆炸。 (这并不总是需要的,但了解规则可以让人们做出适当的决定,只要什么结构是可以接受的。)
      • 是的,我绝对不会反对您要构建包含数字的字符串的情况:console.log('I have ' + number_of_ducks + ' ducks!'); 我反对仅将连接用于强制转换。不抛出异常很有价值,但我认为在这种情况下可能需要 try..catch。
      • @Samuel Cole 我认为这些操作没有什么不同。最终结果是遵循特定规则的数字的字符串表示形式。无论如何,我更喜欢编写对结构更改“幂等”的代码,并且有选择地使用toString 不会进一步导致这个原因。
      【解决方案6】:

      在我看来,我们应该使用String(number)而不是number + ''number.toString(),因为

      • number + '' 会触发 JSLint 错误

      • 如果numbernullundefinednumber.toString() 将失败,并且您将遇到 TypeError: number is undefined / null

      【讨论】:

        【解决方案7】:

        最近,JSLint 处于测试阶段。新版本不再抱怨这段代码:

        function convert(x) {
            'use strict';
            // alert(typeof x);
            x = x + "";
            // alert(typeof x);
            return x;
        }
        
        
        convert(3);
        

        【讨论】:

          猜你喜欢
          • 2020-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-11
          • 1970-01-01
          相关资源
          最近更新 更多