在变量之前加号的目的是什么?

goh*_*goh 237 javascript

这真的听起来像一个简单的问题,但我没有运气搜索.什么是+d

function addMonths(d, n, keepTime) { 
    if (+d) {
Run Code Online (Sandbox Code Playgroud)

手段?

Pau*_*ier 271

+运算符返回对象的数字表示.因此,在您的特定情况下,它似乎是在判断d是否为非零数字.

参考这里.而且,正如评论中所指出的,这里.

  • 文档:https://developer.mozilla.org/en/JavaScript/Reference/Operators/Arithmetic_Operators#.2b_(Unary_Plus%29) (6认同)
  • @丹尼尔W。1. `parseInt` 将返回一个整数,因此如果您执行 `parseInt("5.51")`,结果将是 `5`,而 `+"5.51"` 将返回 `5.51`。2. `parseInt` 将从字符串中“解析”数字,并在第一个非数字符号处停止,而一元加号将转换整个输入。所以 `parseInt("5 个香蕉") //5` 而 `+"5 个香蕉" //NaN` (4认同)
  • 它与 `.parseInt()` 有什么不同? (2认同)
  • @acarlstein 来自答案中的 MDN 链接:“虽然一元否定 (-) 也可以转换非数字,**一元加是将某些内容转换为数字的最快且首选的方式**,因为它不执行任何其他操作对号码进行操作。” (只是为了“官方”答案) (2认同)

Jso*_*owa 25

运算符+是将值转换为数字的一元运算符。下面我准备了一个表格,其中包含将此运算符用于不同值的相应结果。

+-----------------------------+-----------+
| Value                       | + (Value) |
+-----------------------------+-----------+
| 1                           | 1         |
| '-1'                        | -1        |
| '3.14'                      | 3.14      |
| '3'                         | 3         |
| '0xAA'                      | 170       |
| true                        | 1         |
| false                       | 0         |
| null                        | 0         |
| 'Infinity'                  | Infinity  |
| 'infinity'                  | NaN       |
| '10a'                       | NaN       |
| undefined                   | Nan       |
| ['Apple']                   | Nan       |
| function(val){ return val } | NaN       |
+-----------------------------+-----------+
Run Code Online (Sandbox Code Playgroud)

运算符+返回已实现方法的对象的值valueOf

let something = {
    valueOf: function () {
        return 25;
    }
};

console.log(+something);
Run Code Online (Sandbox Code Playgroud)

  • 重要的事情:“1.”和其他以“.”结尾的字符串将通过删除尾随的“.”来修复。我在修复某些实时输入处理程序中的错误时偶然发现了这一点,该错误应该允许输入十进制数字,但由于“+”运算符修剪掉了尾随的“.”而没有按预期工作。 (2认同)
  • 请记住在“if”语句中谨慎使用“+”运算符,因为“NaN”既不等于“true”也不等于“true”或“false”:“if (+function(){ }) console.log('success')” - 这将不执行 (2认同)

nai*_*sts 22

它是一个一元"+"运算符,它产生一个数值表达式.d*1我相信它会是一样的.

  • @Nemesius,好点。尽管我回答这个问题已经过去了 10 年,但这个答案中的“我相信”部分仍然成立。我不完全确定,是否可以想象这两个 JavaScript“黑客”以相同方式工作的所有可能情况。如果 `'string'*1` 返回的内容与 `+'string'` 不同怎么办?所以,它是大致相同的 - 我相信:) (5认同)
  • 如果您不完全确定发生了什么,请不要添加答案。我对我所相信的感到困惑,如果你确定的话请改变它。 (4认同)

ece*_*ulm 11

如其他答案中所述,它将变量转换为数字.当d可以是数字或字符串时特别有用 功能 评估为数字.

示例(使用问题中的addMonths函数):

addMonths(34,1,true);
addMonths("34",1,true);
Run Code Online (Sandbox Code Playgroud)

那么+d在所有情况下,遗嘱将评估为一个数字.因此,根据是否d是可以转换为数字的数字,函数或字符串,无需检查类型并采用不同的代码路径.

  • 你能编辑你的答案以消除疯狂吗?这很令人困惑。 (4认同)