DateTime数学适用于2行代码,但不适用于1行代码



我遇到了一个有趣的Javascript现象,我无法解释。假设我想将当前时间转换为0.0到23.5之间的值,增量为0.5,即0、0.5、1 1.5…22、22.5、23、23.5

这个代码的作用是:

const dateTimeNow = new Date();
let currentTime = dateTimeNow.getHours();
currentTime += (dateTimeNow.getMinutes() === 30) ? 0.5 : 0;
console.log(currentTime);

但这个单行版本无法产生正确的值:

const dateTimeNow = new Date();
let currentTime = dateTimeNow.getHours() + (dateTimeNow.getMinutes() === 30) ? 0.5 : 0;
console.log(currentTime);

希望有人能解释原因!

原因是运算符的优先级。你的表情:

a + b ? c : d

评估对象:

(a + b) ? c : d

而不是:

a + (b ? c : d)

这是您的三元运算符,您认为操作顺序应该是这样的:

dateTimeNow.getHours() + (dateTimeNow.getMinutes() === 30) ? 0.5 : 0;

dateTimeNow.getHours() + 0.5

20.5

事实上,它是这样做的:

dateTimeNow.getHours() + (dateTimeNow.getMinutes() === 30) ? 0.5 : 0;

20 + true ? 0.5 : 0;

21 ? 0.5 : 0;

0.5;

要解决这个问题,你只需要添加另一组括号:

let currentTime = dateTimeNow.getHours() + ((dateTimeNow.getMinutes() === 30) ? 0.5 : 0);

相关内容

最新更新