首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DateTime数学使用2行代码,但不是1行

DateTime数学使用2行代码,但不是1行
EN

Stack Overflow用户
提问于 2020-04-02 10:55:55
回答 2查看 32关注 0票数 2

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

这段代码可以做到这一点:

代码语言:javascript
运行
复制
const dateTimeNow = new Date();
let currentTime = dateTimeNow.getHours();
currentTime += (dateTimeNow.getMinutes() === 30) ? 0.5 : 0;
console.log(currentTime);

但是这个单行版本不能产生正确的值:

代码语言:javascript
运行
复制
const dateTimeNow = new Date();
let currentTime = dateTimeNow.getHours() + (dateTimeNow.getMinutes() === 30) ? 0.5 : 0;
console.log(currentTime);

希望有人能解释一下原因!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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);

票数 2
EN

Stack Overflow用户

发布于 2020-04-02 11:01:12

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

a + b ? c : d

计算结果为:

(a + b) ? c : d

而不是去:

a + (b ? c : d)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60983563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档