javascript - 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
如果类型startDate
不是,则为,如果 是"number"
,则为false"number"
||
- 逻辑或expense.createdAt >= startDate
-true
如果expense.createdAt
大于或等于startDate
如果 的类型不是或大于或等于;那么startDateMatch
将设置为; 它将被设置为否则。true
startDate
"number"
expense.createdAt
startDate
false
顺便说一句,这不是三元运算(具有三个操作数的运算)。它是一组三个二进制操作(具有两个操作数的操作):
typeof startDate !== 'number'
- 操作数是typeof startDate
and'number'
,运算符是!==
expense.createdAt >= startDate
- 操作数是expense.createdAt
和startDate
,运算符是>=
。(result of 1) || (result of 2)
- 操作数是上述两个的结果(不按该顺序计算),运算符是||
||
像这样工作:
- 它评估它的左操作数
- 如果 #1 的结果是真值,则将该真值作为其结果
- 如果 #1 的结果是falsy,则
||
计算其右侧操作数并将该结果作为其值
(真值是不假的值。假值是false
在条件下计算的值。假值是0
, ""
, NaN
, null
, undefined
,false
和 [on browsers]document.all
出于历史原因。所有其他值都是真值。 )
JavaScript 确实有一个三元运算符(目前),即条件运算符 ( ? :
)。
推荐阅读
- javascript - 计算对象数组中的单词
- json - SyntaxError:来自 ajax 后调用的 JSON 输入意外结束
- asp.net - ASP.NET web.config 授权 403 错误
- c# - 参数化更新不更新 NULL 默认日期时间
- java - Java中的错误合并排序
- lisp - LISP gensym 和 Let 函数的问题
- javascript - 从 JS 编辑 JSON 文件中的数据工作错误(discord.js 编码)
- postgresql - Heroku Go WebApp 错误 - 连接关闭而没有响应
- nlp - 预测文本中的缺失词
- sql - 使用从特定数字开始的新数字字符串更新数字列