如何解决在 JavaScript 中使用逻辑运算符与三元运算符的具体案例
我在 Angular documentation 中遇到了这个表达式:
(name && name.trim()) || '<no name set>';
这个和
基本一样name ? name.trim() : '<no name set>';
我已经针对以下名称和两个表达式的输入结果进行了测试:
function fn1(name){
return (name && name.trim()) || '<no name set>';
}
function fn2(name){
return name ? name.trim() : '<no name set>';
}
var inputs = [undefined,null,'','astring']
console.log(inputs.map(fn1));
console.log(inputs.map(fn2));
因此,使用上述哪一个是更好的做法的问题。我猜三元更易读。但是,我感谢您对此或我可能遗漏的任何内容的想法。
更新 我错过了一个测试,它是一个全空白字符串。这会导致不同的输出。
function fn1(name){
return (name && name.trim()) || '<no name set>';
}
function fn2(name){
return name ? name.trim() : '<no name set>';
}
var inputs = [' ','\t']
console.log(inputs.map(fn1));
console.log(inputs.map(fn2));
正如 @T.J. 所建议的那样Crowder 这个问题可以用较少意见的形式来表述,例如:
将 (x && x.y) || z 曾经给出与 x 不同的结果吗? x.y : z?
但是我从这个框架中学到的东西更重要。当你在 Angular 文档中看到类似的代码时,如果你从更一般的方面考虑它,就像上面一样,你可以更好地看到差异。查看新问题,您很容易看到 x.y
可能像 x
一样评估为 false。并且因为所有评估为 false 的值都不相同,因为我们有空字符串、未定义等,那么这两个表达式是不相等的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。