一点有意思的分享
来源:哔哩哔哩
2023-04-17 23:00:26
(资料图)
今天刷视频看到一个逆天代码。
大致是这样的,于是有人说,你为什么不写成“user || null ”呢?这是一个很有意思的思考。在编写代码和简化的时候,一定要注意代码的等效。即两段不同的代码在无论输入任何值时,都有相同的结果,这样的代码才是等效的。简化代码时,如果不考虑等效就有可能出各种BUG。比如上例:
在JS中,当变量的值是 false, 0, "", null undifined, document.all 中的任何一个时,都会被视为false,这个也就是所谓的falsy。而原代码要求的判断条件是 不为null 。这个绝对不可以简写为 if (!user) 这是不相同的判断条件。在这里,空字符串和0有可能根据需求有其它含义。
另外,有人说三元运算符的可读性不好,其实这个也有问题。三元运算符的效率和if语句是不一样的:
多次执行此程序,要以看出三元运算符通常会比if语句要快一些。当然,对于JS程序,这种效率优化完全没有任何意义,有些弱智的编译器还会帮你优化。但了解这个知识,我认为是没有问题的。而且说,三元运算符所在的语句是表达式语句,他有一个结果。而if所在的语句是控制语句,他只负责流程,所以,二者的作用不相同,目的不相同,也没有放在一起比较的必要。例如本例,使用三元运算符即精简代码,又符合三元运算符本身的含义,自然是推荐使用的。