为啥带有 some 方法的三元运算符会使此语句为假?

Posted

技术标签:

【中文标题】为啥带有 some 方法的三元运算符会使此语句为假?【英文标题】:Why does the ternary operator with the some method make this statement false?为什么带有 some 方法的三元运算符会使此语句为假? 【发布时间】:2020-09-06 03:24:15 【问题描述】:

这里有几个问题。这是来自 Wes Bos 的 30 天 javascript 课程。

    为什么三元运算符(已注释掉)会使其为假? 为什么我的解决方案不正确?

挑战

const people = [
     name: 'Wes', year: 1988 ,
     name: 'Kait', year: 1986 ,
     name: 'Irv', year: 1970 ,
     name: 'Lux', year: 2015 
];

// Array.prototype.some() // is at least one person 19 or older?
// Array.prototype.every() // is everyone 19 or older?

韦斯的解决方案

const isOlderThan19 = people.some(function(person) 
    const currentYear = new Date().getFullYear();
    // (currentYear - person.year >= 19) ? true : false
    if (currentYear - person.year >= 19) 
        return true;
    
);

我的解决方案

const isOlderThan19 = (element) => 
    let age = new Date().getFullYear() - element.year;
    age >= 19;


console.log(people.some(isOlderThan19));

我尝试将设置到控制台的年龄记录下来。除了一个人之外,其他人都超过 19 岁,但它返回 false。我正在尝试了解原因。

【问题讨论】:

欢迎堆栈溢出! 【参考方案1】:

1- 三元运算符前面没有return,所以函数默认返回undefined,这是不希望的。

2- isOlderThan19 没有返回任何内容,您可能错过了age >= 19 之前的返回词

由于缺少return 语句,这两个示例都失败了。

【讨论】:

在第一个版本中使用三元运算符也存在同样的问题。 该死的。我对箭头函数的假设太多了。这很尴尬。谢谢!【参考方案2】:

试试这个

const isOlderThan19 = (element) => 
    let age = new Date().getFullYear() - element.year;
    return age >= 19;


console.log(people.some(isOlderThan19));

【讨论】:

【参考方案3】:

您的三元语句需要实际返回,而不仅仅是布尔值

(currentYear - person.year >= 19) ? return true : return false

更准确地说

const isOlderThan19 = people.some(function(person) 
    const currentYear = new Date().getFullYear();
    return (currentYear - person.year >= 19) ? true : false
);

【讨论】:

以上是关于为啥带有 some 方法的三元运算符会使此语句为假?的主要内容,如果未能解决你的问题,请参考以下文章

C-switch语句, 逻辑运算符, 三元运算符, 指针与函数

三元运算符

关系运算符逻辑 运算符与三元运算符

python 三元运算

JavaScript 三元运算符变成完整的 if/else 语句问题

为啥使用“if-else”语句会在看似相同的三元运算符构造不会产生 TypeScript 编译器错误?