JSLint批准的将数字转换为字符串的方法是什么?

时间:2011-04-28 16:32:40

标签: javascript jslint

我总是通过向他们添加空字符串将数字转换为字符串:

var string = 1 + '';

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

有更好的方法吗?

7 个答案:

答案 0 :(得分:22)

我认为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 :(得分:8)

(对不起,上面的评论可能会更好,但我还没有获得发表评论的权利,所以......)

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

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

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

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

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

答案 2 :(得分:3)

您可以使用.toString()方法,如下所示:

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

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

我要说“bug”或“mis-feature”

科尔考虑一下

var x = "foobar" + 1;

是“已批准”的jslint。无论如何,它是100%有效的Javascript。

快乐的编码。


评论:

这就是为什么我更喜欢使用字符串文字作为第一个操作数,因为它显示了意图 - 知道语言是使用语言的基础。

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

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

答案 5 :(得分:1)

在我看来,我们应该使用IWebDriver driver; // assume assigned elsewhere IJavaScriptExecutor js = driver as IJavaScriptExecutor; js.ExecuteScript("$('#foo').focus()"); js.ExecuteScript("$('#foo').blur()"); 代替IWebElement testDiv = WebDriver.FindElement( By.Id( "someID" ) ); Actions builder = new Actions( WebDriver ); Actions hoverClick = builder.MoveToElement( testDiv ).MoveByOffset( x, y ).Click(); hoverClick.Build().Perform(); String(number),因为

  • number + ''将触发JSLint错误

  • 如果number.toString()number + ''number.toString(),则
  • number将失败,您将 TypeError:number is undefined / null

答案 6 :(得分:0)

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

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


convert(3);