变量前加号的作用是什么?

IT技术 javascript
2021-02-02 12:07:04

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

function addMonths(d, n, keepTime) { 
    if (+d) {

方法?

4个回答

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

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

@丹尼尔W。1.parseInt将返回一个整数,所以如果你这样做parseInt("5.51"),结果将是5while+"5.51"会给你5.512.parseInt解析字符串中的数字并在第一个非数字符号处停止,而一元加号将转换整个输入。所以parseInt("5 bananas") //5虽然+"5 bananas" //NaN
2021-03-14 12:07:04
它与 有什么不同.parseInt()
2021-03-20 12:07:04
答案中来自 MDN 链接的 @acarlstein:“虽然一元否定 (-) 也可以转换非数字,但一元加号是将某物转换为数字的最快和首选方式,因为它不对数字执行任何其他操作.” (仅用于“官方”答案)
2021-03-21 12:07:04

运算符+是将值转换为数字的一元运算符。下表列出了将此运算符用于不同值的相应结果。

+-----------------------------+-----------+
| 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       |
+-----------------------------+-----------+

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

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

console.log(+something);
重要的是: 1.其他以 结尾的字符串.将通过删除尾随的.. 我在修复一些实时输入处理程序中的错误时偶然发现了这一点,该错误应该允许输入十进制数,但由于+操作员修剪掉了尾随..
2021-03-14 12:07:04
请记住+if语句中谨慎使用运算符,因为NaN既不等于 'true` 或false: if (+function(){ }) console.log('success')- 这将不会执行
2021-03-15 12:07:04

它是一个一元“+”运算符,它产生一个数字表达式。d*1我相信它和 一样

如果您不完全确定发生了什么,请不要添加答案。我对我相信的感到困惑,如果您确定,请更改它。
2021-03-17 12:07:04
@Nemesius,好点。即使自从我回答它已经过去了 10 年,这个答案中的“我相信”部分仍然成立。我不完全确定,如果我能想象两个 JavaScript“黑客”以相同方式工作的所有可能情况。如果'string'*1返回的东西不同于+'string'? 所以,它大致相同 - 我相信:)
2021-04-10 12:07:04

如其他答案中所述,它将变量转换为数字。d可以是数字或计算结果为数字的字符串时特别有用

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

addMonths(34,1,true);
addMonths("34",1,true);

那么+d在所有情况下都将评估为一个数字。从而避免需要检查类型并根据d是数字、函数还是可以转换为数字的字符串采用不同的代码路径

真的,我不知道我在写这篇文章时做了什么。+function(){...}将产生一个NaN不评估函数
2021-03-11 12:07:04
+d 第一个调用示例中的 addMonths 不会计算为数字
2021-03-16 12:07:04
你能编辑你的答案以消除疯狂吗?这很令人困惑。
2021-04-04 12:07:04