📜  在没有任何条件声明的情况下实现三元运算符(1)

📅  最后修改于: 2023-12-03 15:23:34.957000             🧑  作者: Mango

在没有任何条件声明的情况下实现三元运算符

在大多数编程语言中,有一个特殊的语法结构叫做三元运算符,它通常有如下的形式:

condition ? expr1 : expr2

意思是如果 condition 为真,则返回 expr1,否则返回 expr2

不过有时候,我们可能需要在没有条件声明的情况下实现一个类似三元运算符的功能。下面就是一种实现方式:

const ternary = (condition, expr1, expr2) => (condition && expr1) || expr2;

这个函数接受三个参数,分别是判断条件、为真时的表达式和为假时的表达式。在函数内部,首先判断 condition,如果为真,则返回 expr1,否则返回 expr2

在实际使用中,这个函数可以让我们避免使用过多的条件语句,使代码更简洁清晰。但同时也需要注意这个函数的局限性,它只能判断表达式是否为真或假,不能使用其它条件进行判断,比如大于或小于等。

示例代码:

const result = ternary(1 === 1, 'Yep', 'Nope');
console.log(result); // 输出:'Yep'

const result2 = ternary(2 + 2 === 5, 'Yep', 'Nope');
console.log(result2); // 输出:'Nope'

这里利用了模拟表达式的方式来实现三元运算符,核心思想是通过短路运算实现对表达式的判断,如果 condition 为真,则按照短路规则返回 expr1,否则返回 expr2

(condition && expr1) || expr2

其中,&& 运算符的优先级高于 || 运算符,因此如果 condition 为真,则 condition && expr1 的值为 expr1,然后整个表达式返回 expr1;如果 condition 为假,则 condition && expr1 的值为 condition,然后整个表达式返回 expr2

当然,在日常开发中,我们也可以使用 ES6 中新增的可选链语法来实现类似的功能:

const result = {a: {b: 'value'}}
console.log(result.a?.b ?? 'Default'); // 输出: 'value'
console.log(result.x?.y ?? 'Default'); // 输出: 'Default'

这个语法的意思是,如果对象存在 a 属性,则访问该属性的 b 属性并返回其值,否则返回默认值 'Default';同理,如果对象不存在 x 属性,则返回默认值 'Default'

总结一下,如果只是简单的判断真假,可以使用模拟表达式或可选链语法来实现三元运算符的功能,否则还是需要使用条件语句来进行判断。