自从我找到toString()函数以来,我一直在想这个问题,但是从来没有费心去问过。我应该使用基本的JS还是使用相同功能的函数?
现在,不要误解我,我意识到toString具有兑换的特性,比如将函数转换为字符串。
var message = function() {
// multi
// line
// string
}.toString();
但承认:我们主要使用toString将数字转换为字符串。我们不能这样做吗?
var myNumber = 1234;
var message = ''+myNumber;
这不仅更短,而且根据JSPerf,toString方法慢了97%! (证明:http://jsperf.com/tostring-vs-basic-js)正如我所说,我知道toString很有用,但是当人们提出有关Javascript变量类型的问题时,toString()通常会出现。这就像基本的Javascript一样。每个浏览器都可以做引号。
parseInt也是如此。现在,在我发现parseInt之前,我发现将字符串乘以1会将其转换为数字。那是因为你无法将字符串相乘,自然会迫使Javascript将其视为一个数字。
var message = "4321";
var myNumber = message*1;
现在,有趣的是,这比parseInt慢,但不是很多。我还注意到一个空字符串或一个没有数字的字符串将返回0,而parseInt将返回NaN,因为字符串中没有数字。再一次,我意识到parseInt更快,可以转换为不同的基础。但是,乘法更短,可以在任何浏览器中使用,而parseInt,记住,只会返回整数。那么为什么它总是作为问题的答案出现,询问如何转换为数字/ NaN是什么?
现在这可能会偏离主题,但我真的想知道关于jQuery的类似事情。再一次,jQuery是我从未真正理解的用途。 Javascript代码很干净,jQuery本身就是一个JS文件,所以Javascript无法做任何事情。它可能会简化某些功能和内容,但为什么不将这些功能复制到您的页面然后省去您不使用的其余功能?包含jQuery仅仅是为了完成一个简单的任务似乎有点过分。动画也不会在这里被原谅 - 因为这也可以用原生Javascript来完成。那么为什么jQuery?
最终我要问的是,为什么在有更好的方法时,我们为了这些目的需要这些东西?或者他们是更好的方法?一般来说,使用函数是否更好?
答案 0 :(得分:2)
这不仅更短,而且根据JSPerf,toString方法慢了97%!
除非您每秒和在数以亿计的数字上调用.toString()
,否则您通过性能分析发现这是您的应用程序中的瓶颈,这应该是 根本不是一个因素。
但承认:我们主要使用toString将数字转换为字符串
正如您所见,这可以通过仅添加字符串和数字来隐式完成,因此我没有看到使用'' + n
代替n.toString()
的任何好处。如果您实际上没有将n
与字符串连接,后者更具可读性。
但是,乘法更短,可以在任何浏览器中使用,而parseInt,请记住,只会返回整数。
您是说parseInt
在每个浏览器中都不起作用?如果要将某些内容解析为整数,请使用parseInt
。如果你想解析一些浮点数(JavaScript实际上并没有特殊的类型,所有数字都是浮点数),请使用parseFloat
。
更常见的模式是使用+'123'
,其行为与1 * '123'
完全相同。 parseInt
正确处理空字符串,但无论出于何种原因,都不会像您期望的那样验证字符串。如果出现错误,一元加号会返回NaN
,但会错误地处理空格和空字符串。这是JavaScript的缺点之一,所以如果你在10号基地工作,那么两者之间真的没有具体的选择。
那为什么它总是作为问题的答案出现,询问如何转换为数字/ NaN是什么?
因为规范包含了这些函数来将字符串转换为数字并使用像您这样的二元运算符将字符串转换为数字是一个副作用,而不是主要目的。你也可以使用parseInt
解析不同基数的整数,这种类型强制是不可能的。
它可能会简化某些功能和内容,但为什么不将这些功能复制到您的页面然后省去您不会使用的其余功能?
如果你从CDN加载jQuery,那么用户的浏览器很可能已经下载并缓存了它,这使得下载时间和膨胀几乎不存在。如果您进行了#34;自定义构建",我敢打赌它会在首次加载时使网站速度变慢。
动画也不会在这里得到解释 - 因为也可以使用原生Javascript来完成。
一切都可以。每次写东西时重新发明轮子都没有意义。