我总是通过向他们添加空字符串将数字转换为字符串:
var string = 1 + '';
然而,JSLint用Expected 'String' and instead saw ''''.
抱怨这个方法,看起来确实有些难看。
有更好的方法吗?
答案 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);