Ion*_*zău 5 javascript string concatenation
每个人都知道JavaScript中两个字符串的基本连接:
> "Hello " + "World!"
'Hello World!'
Run Code Online (Sandbox Code Playgroud)
但是,如果我们使用+ +而不是+?我刚刚遇到了以下奇怪的行为:
> "Hello " + + "World!"
'Hello NaN'
> "Hello " + + ""
'Hello 0'
Run Code Online (Sandbox Code Playgroud)
从上面的例子中,我可以看到第二个字符串被转换为数字.因此,传递具有valueOf属性作为函数的对象,将转换该函数返回的值.
> "Hello " + + ({valueOf: function () {return 1; }})
'Hello 1'
Run Code Online (Sandbox Code Playgroud)
正如所料,它表明"Hello 1".
为什么第二个字符串被转换Number?为什么不抛出语法错误呢?
第二个+是一元加运算符,其目的是将其操作数转换为数字。
一元加运算符位于其操作数之前并计算其操作数,但尝试将其转换为数字(如果尚未转换为数字)。尽管一元否定 (-) 也可以转换非数字,但一元加是将某些内容转换为数字的最快且首选的方式,因为它不对数字执行任何其他操作。它可以转换整数和浮点数的字符串表示形式,以及非字符串值 true、false 和 null。支持十进制和十六进制(“0x”前缀)格式的整数。支持负数(但不支持十六进制)。如果它无法解析特定值,它将计算为 NaN。
"Hello " + + "World!"
Run Code Online (Sandbox Code Playgroud)
只能解析为
"Hello " + (+ "World!")
Run Code Online (Sandbox Code Playgroud)
这是
"Hello " + NaN
Run Code Online (Sandbox Code Playgroud)
因此你的结果。
这个一元运算符在 JavaScript 中非常有用,并且是将数字或字符串转换为数字的最常见方法之一。它还有一个优点,parseFloat那就是它的容忍度不高(parseFloat("7up")会返回7),这使得它成为一种简单的方法来查看字符串是否是数字的表示(只需测试s==+s)。
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |