【问题标题】:How does using + as a casting mechanism work?使用 + 作为强制转换机制如何工作?
【发布时间】:2013-10-18 06:24:56
【问题描述】:

我见过使用加号运算符将字符串转换为数字的代码。

这看起来像:

var x ="5",y;
y = +x;
console.log(typeof y) //number

这是如何工作的?

【问题讨论】:

  • @Sebas JavaScript 引擎不会猜测你想要什么,它只是应用运算符。它并没有像 -4 那样制作一个文字,它只是动态地将运算符应用于后面的内容。
  • @dystroy,我明白了。不过,在我看来,隐含地进行转换已经在猜测这是您(编码员)想要的。其他强类型语言会崩溃。就是说影响一个字符串值到一个变量,javascript猜测类型是一样的。这是正确的,因为这是引擎必须知道它的唯一方法。

标签: javascript string casting type-conversion typeof


【解决方案1】:
var x = "5",
    y;

您声明了两个变量,分别命名为 xy。前者设置为保存字符串"5",后者保存undefined 值(因为它已声明但未定义)。 然后将y 设置为字符串"5"(通过一元运算符+)的Number 类型的转换,即5。所以你将typeof y 变成number

+ 运算符是unary operator。它评估一个试图将其转换为数字的对象。

【讨论】:

    【解决方案2】:

    事实上,+ 有两个运算符:二元 + 运算符和这个:一元 + 运算符

    看看它是如何描述的in the MDN

    • (一元加号)

    一元加号运算符在其操作数之前,计算其 操作数,但尝试将其转换为数字,如果不是 已经。例如,y = +x 取 x 的值并将其分配给 是;也就是说,如果 x 为 3,则 y 将获得值 3 而 x 将保留 值 3;但如果 x 是字符串“3”,则 y 也会得到值 3. 虽然一元否定 (-) 也可以转换非数字,但一元加是最快且首选的方式将某物转换为 编号,因为它不执行任何其他操作 数字。它可以转换整数和浮点数的字符串表示, 以及非字符串值 true、false 和 null。整数 支持十进制和十六进制(“0x”-前缀)格式。 支持负数(虽然不支持十六进制)。如果不能 解析一个特定的值,它将评估为 NaN。

    【讨论】:

    • 这对所有浏览器都有效吗?只是好奇
    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 2016-03-21
    • 2016-08-05
    相关资源
    最近更新 更多