我遇到了一个有趣的Javascript现象,我无法解释。假设我想以0.5为增量将当前时间转换为从0.0到23.5的值-即。0,0.5,11.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);
希望有人能解释一下原因!
发布于 2020-04-02 11:02:25
它是你的三元运算符,你认为操作的顺序应该是这样的:
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);
发布于 2020-04-02 11:01:12
原因是运算符的优先级。你的表情:
a + b ? c : d
计算结果为:
(a + b) ? c : d
而不是去:
a + (b ? c : d)
https://stackoverflow.com/questions/60983563
复制相似问题