JavaScript中三元运算符的使用及其明显的缺点if-else语句,代码变得更加简洁。先写一些它的用法,举两个简单的例子1===0?2:3//31===0?2:3===3?5:6//5如果?如果左边为真,则输出:前面的内容,如果为假,则输出后面的内容。如果有多个三元运算,从右到左,先计算表达式的值,然后逐层得到最终结果。这里我再举几个例子,顺便解释一下两个等号和三个等号的区别1=='1'//true0=='0'//true0==''//true0===''//false0==null//falseNaN==''//falsenull==undefined//true具体规则先说===(等价),这个比较简单,具体比较规则如下如下:1.如果类型不同,就[不等于]2.如果两者都是数值,并且是相同的值,那么[等于];(!exception)是,如果其中至少一个是NaN,则[不等于]。(只能用isNaN()来判断一个值是否为NaN)3、如果都是字符串,并且每个位置的字符都相同,则[equal];否则[不等于]。4.如果两个值都为真,或者都为假,则【相等】。5.如果两个值都引用同一个对象或函数,那么[equal];否则[不等于]。6.如果两个值都是null,或者都是undefined,那么[equal]。除==(等价运算符)外,具体比较规则如下:1、如果两个值类型相同,则进行===比较,比较规则同上。2.如果两个值类型不同,则它们可能相等。进行类型转换,然后按照以下规则进行比较:a.如果一个为null而另一个未定义,则[equal]。b.如果一个是字符串,另一个是值,则在比较之前将字符串转换为值。C。如果任何一个值为真,则将其转换为1并进行比较;如果任何值为false,则将其转换为0并进行比较。d.如果一个是对象,另一个是值或字符串,则将对象转换为基础类型的值并进行比较。使用其toString或valueOf方法将对象转换为基础类型。JS核心内置类会在toString之前尝试valueOf;Date除外,它使用toString转换。非核心js的对象,比方说(比较麻烦,不懂)e,其他任意组合(array数组等),都是[notequal]。接下来说说它最大的缺点。我们都知道左边的运算结果返回true时,最终值取冒号左边的内容,返回false时,最终值取冒号右边的内容。但关键是左边的运算结果有时正是我们想要的,只是恰好等于'false'。这个时候我们就不能很方便的使用简单的三元运算符了。例如:让str1=0str1?'存在':'不存在'这种场景我们很容易认为是判断左边的内容是否存在,特别容易产生歧义。其次,对于多个三元运算符的嵌套使用,虽然代码少了很多,但是要详细理解还是比较麻烦的。写代码时,不仅要看整洁度,还要看可读性!
