首页 > 解决方案 > 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;

标签: javascriptredux

解决方案


我在理解那部分做了什么时遇到了问题:

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将设置为; 它将被设置为否则。truestartDate"number" expense.createdAtstartDatefalse


顺便说一句,这不是三元运算(具有三个操作数的运算)。它是一组三个二进制操作(具有两个操作数的操作):

  1. typeof startDate !== 'number'- 操作数是typeof startDateand 'number',运算符是!==
  2. expense.createdAt >= startDate- 操作数是expense.createdAtstartDate,运算符是>=
  3. (result of 1) || (result of 2)- 操作数是上述两个的结果(不按该顺序计算),运算符是||

||像这样工作:

  1. 它评估它的左操作数
  2. 如果 #1 的结果是值,则将该真值作为其结果
  3. 如果 #1 的结果是falsy,则||计算其右侧操作数并将该结果作为其值

值是不假的值值是false在条件下计算的值。假值是0, "", NaN, null, undefined,false和 [on browsers]document.all出于历史原因。所有其他值都是真值。 )

JavaScript 确实有一个三元运算符(目前),即条件运算符 ( ? :)。


推荐阅读