如何解决JS/Redux 三元操作讲解
你能解释一下这部分代码是如何工作的吗?我遵循课程并坚持下去:
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
的结果,即:
-
typeof startDate !== 'number'
- 如果true
的类型为 notstartDate
,则为"number"
,如果为,则为 false强>"number"
-
||
- 逻辑 OR -
expense.createdAt >= startDate
- 如果true
大于或等于expense.createdAt
,则为
startDate
因此,如果 startDateMatch
的类型不是 true
或 startDate
大于或等于"number"
;否则将设置为 expense.createdAt
。
顺便提一下,这不是三元运算(具有三个操作数的运算)。这是一组三个二元运算(具有两个操作数的运算):
-
startDate
- 操作数为false
和typeof startDate !== 'number'
,操作符为typeof startDate
-
'number'
- 操作数为!==
和expense.createdAt >= startDate
,操作符为expense.createdAt
。 -
startDate
- 操作数是上面两个的结果(不按顺序求值),操作符是>=
(result of 1) || (result of 2)
的工作方式如下:
- 它评估它的左手操作数
- 如果 #1 的结果是 truthy,则将该真实值作为结果
- 如果 #1 的结果是 falsy,
||
会评估其右侧操作数并将该结果作为其值
(一个 truthy 值是一个不是 falsy 的值。一个 falsy 值是一个计算结果为 { {1}} 在条件中。假值为 ||
、||
、false
、0
、""
、NaN
和 [on浏览器] null
出于历史原因。所有其他值都是真实的。)
JavaScript 确实有一个三元运算符(目前),条件 运算符 (undefined
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。