+运算符意外连接

时间:2019-02-08 07:59:31

标签: angular typescript

我知道在javascript中,+运算符有时可以充当串联运算符,而不是加法运算符,但是令我惊讶的是它正在为我拥有的代码执行此操作:

private getDefaultWeeks(year:number):week[]{
  let date = new Date(year,0,1);
  var currentDate= new Date();
  currentDate = this.dateService.getFirstMonday(date);
  while (currentDate.getFullYear()<(year+1)) //gets stuck here
  ..............
  }

因此在我的示例中,例如(year + 1)有时会被翻译成20181

鉴于该年份已经输入数字,有人可以向我解释为什么会这样,什么是最佳解决方案。我可以将year + 1拉到一个新变量中,但本能地认为这是一个不需要存在的变量。

2 个答案:

答案 0 :(得分:2)

即使您将其键入“数字”,如果您使用字符串调用getDefaultWeeks,它也将被视为字符串(不会进行强制转换)。 您确定要用数字呼叫getDefaultWeeks吗?

答案 1 :(得分:1)

如果是这种情况,则需要将其强制转换为数字:执行(+year + 1)应该可以。请记住,TS实际上无法为您自动将其强制转换为数字,并且在运行时也无法检测到它是否是字符串。即使这是一个权宜之计,您仍需要检查为什么getDefaultWeeks()被传递了一个字符串作为参数。