离奇的javascript算术行为(是的...预期)

Der*_*air 4 javascript math

好的,我正在编写一个小代码片段来获取昨天的ISO日期格式值.

码:

var dateString = new Date();

var yesterday = dateString.getFullYear();

    yesterday += "-"+dateString.getMonth()+1;

    yesterday += "-"+dateString.getDate()-1;
Run Code Online (Sandbox Code Playgroud)

以上代码输出2009-111-23.显然没有将dateString.getMonth()视为intiger并将1添加到它的末尾.

将" - "+放在dateString.getDate()前面会将getDate()强制转换为字符串吗?

这项工作得到了预期的结果.

var dateString = new Date();

var yesterday = dateString.getFullYear() + "-";

    yesterday += dateString.getMonth()+1+ "-";

    yesterday += dateString.getDate()-1;
//yesterday = 2009-12-22
Run Code Online (Sandbox Code Playgroud)

虽然我不喜欢它看起来的样子......但没什么大不了的.

任何人都可以向我解释为什么javascript会这样吗?为什么会发生这种情况有什么解释?

Eug*_*ota 13

这是关于关联性的.+运算符是左关联的,所以

"-"+dateString.getMonth() + 1
Run Code Online (Sandbox Code Playgroud)

和...一样

("-"+dateString.getMonth()) + 1
Run Code Online (Sandbox Code Playgroud)

在您要首先评估的表达式周围加上括号:

"-" + (dateString.getMonth() + 1)
Run Code Online (Sandbox Code Playgroud)