你能解释一下这部分代码是如何工作的吗?我坚持到底:
const getVisibleExpenses = (expenses, {text, sortBy, startDate, endDate}) => {
return expenses.filter((expense)=> {
const startDateMatch = typeof startDate !== 'number' || expense.createdAt >= startDate;
所以我们正在破坏这里的东西{text,sortBy…},但是,我在理解这个部分的处理方法时遇到了问题:
const startDateMatch = typeof startDate !== 'number' || expense.createdAt >= startDate;
我在理解该部分的处理方法时遇到了问题:
const startDateMatch = typeof startDate !== 'number' || expense.createdAt >= startDate;
startDateMatch
设置为表达式typeof startDate !== 'number' || expense.createdAt >= startDate
的结果,即:
startDate
的类型为而不是"number"
,则typeof startDate !== 'number'
-将为true
;如果为"number"
,则为false||
—逻辑OR- 如果
expense.createdAt
大于或等于startDate
,则expense.createdAt >= startDate
-将为true
因此,如果startDate
的类型不是"number"
或expense.createdAt
大于或等于startDate
,则startDateMatch
将被设置为true
;否则它将被设置为CCD_ 19。
顺便说一句,这不是一个三元运算(一个有三个操作数的运算(。它是一组三个二进制运算(带有两个操作数的运算(:
typeof startDate !== 'number'
-操作数为typeof startDate
和'number'
,运算符为!==
expense.createdAt >= startDate
—操作数为expense.createdAt
和startDate
,运算符为>=
(result of 1) || (result of 2)
-操作数是上面两个的结果(不按该顺序计算(,运算符为||
||
的工作原理如下:
- 它计算其左侧操作数
- 如果#1的结果是truthy,则将该truthy值作为其结果
- 如果#1的结果为falsy,则
||
计算其右侧操作数,并将该结果作为其值
(truthy值是一个不是falsy的值。falsy值是在条件下评估为false
的值。由于历史原因,falsy值为0
、""
、NaN
、null
、undefined
、false
和[在浏览器上]document.all
。所有其他值都是truthy。(
JavaScript确实有一个三元运算符(目前(,即条件运算符(? :
(。