【问题标题】:What is the purpose of a plus symbol before a variable?变量前加号的目的是什么?
【发布时间】:2011-10-04 17:01:33
【问题描述】:

+d 是什么

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

是什么意思?

【问题讨论】:

标签: javascript


【解决方案1】:

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

参考here。而且,正如 cmets 中所指出的,here.

【讨论】:

  • .parseInt()有什么区别?
  • @DanielW。 1. parseInt 将返回一个整数,因此如果您执行parseInt("5.51"),结果将是5,而+"5.51" 将返回5.51。 2. parseInt解析字符串中的数字并在第一个非数字符号处停止,而一元加号将转换整个输入。所以parseInt("5 bananas") //5+"5 bananas" //NaN
  • @acarlstein 来自 MDN 链接的答案:“虽然一元否定 (-) 也可以转换非数字,一元加号是将某些东西转换为数字的最快和首选方式,因为它不对数字执行任何其他操作。” (只是为了一个“官方”的答案)
【解决方案2】:

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

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. 和其他以. 结尾的字符串将通过删除尾随. 来修复。我在修复一些实时输入处理程序中的错误时偶然发现了这一点,该错误应该允许输入十进制数字但由于+ 运算符修剪掉尾随的. 而没有按预期工作。
  • 记得在if 语句中谨慎使用+ 运算符,因为NaN 既不等于'true` 也不等于falseif (+function(){ }) console.log('success') - 这不会执行
【解决方案3】:

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

【讨论】:

  • 如果您不确定发生了什么,请不要添加答案。我被我相信的东西弄糊涂了,如果你确定它,请改变它。
  • @Nemesius,说得好。这个答案中的“我相信”部分仍然有效,即使我回答它已经过去了 10 年。我不完全确定,如果我能想象两个 JavaScript“黑客”以相同方式工作的所有可能情况。如果'string'*1 返回的内容与+'string' 不同怎么办?所以,它大致相同 - 我相信:)
【解决方案4】:

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

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

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

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

【讨论】:

  • +d 在 addMonths 的第一个调用示例中不会计算为数字
  • 是的,我不知道我在写这篇文章时做了什么。 +function(){...} 将产生 NaN 不评估函数
  • 你能编辑你的答案以消除疯狂吗?这很令人困惑。
猜你喜欢
  • 2014-10-10
  • 2019-12-11
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
相关资源
最近更新 更多