首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何重写这行JavaScript代码以便更简单地阅读?(三元运算符)

如何重写这行JavaScript代码以便更简单地阅读?(三元运算符)
EN

Stack Overflow用户
提问于 2018-06-24 06:23:15
回答 3查看 58关注 0票数 0

您好,我正在尝试学习JavaScript,使用这个日历代码作为学习/项目材料。在这个变量中发生的事情太多了,就像是在看一种外星人的语言。我如何重写这一行以使阅读更简单呢?

https://codepen.io/xmark/pen/WQaXdv

代码语言:javascript
复制
// Last day of the Previous Month.
// , lastDayOfLastMonth = ...
var lastDay_of_LastMonth = m == 0 ? new Date(y-1, 11, 0).getDate() : new Date(y, m, 0).getDate();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-24 06:53:46

月份可以是负数,因此new Date(y-1, 11, 0)new Date(y, -1, 0)相同:

代码语言:javascript
复制
var lastDay_of_LastMonth = new Date(y, m || -1, 0).getDate();

但是,要获得月份为1月(m == 0)时的12月天数,正确的版本是:

代码语言:javascript
复制
var lastDay_of_LastMonth = new Date(y, m, 0).getDate();
票数 2
EN

Stack Overflow用户

发布于 2018-06-24 06:29:34

为了避免重复,您只能通过在三元运算符本身中创建getDate来编写一次new Date,然后对整个表达式调用getDate

代码语言:javascript
复制
var lastDay_of_LastMonth = 
  (m === 0 ? new Date(y-1, 11, 0) : new Date(y, m, 0))
  .getDate();

但是,您也可以为有问题的date对象定义一个独立变量,以明确它所代表的内容:

代码语言:javascript
复制
var lastMonthDate = m === 0
  ? new Date(y - 1, 11, 0)
  : new Date(y, m, 0)
var lastDay_of_LastMonth = lastMonthDate.getDate();

不要害怕将长表达式分成多行

票数 2
EN

Stack Overflow用户

发布于 2018-06-24 06:38:04

当三元运算符(或压缩if)的组件包含许多部分时,它很快就会变得混乱。也许有些人不同意,但将三元运算符限制在更简单的情况下是很好的,比如var parity = x % 2 === 0 ? "even" : "odd"

在您的例子中,我认为将整个if语句写出来是最具可读性的:

代码语言:javascript
复制
var lastDay_of_LastMonth
if (m == 0)
  lastDay_of_LastMonth = new Date(y-1, 11, 0).getDate();
else
  lastDay_of_LastMonth = new Date(y, m, 0).getDate();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51005518

复制
相关文章

相似问题

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