当前位置: 首页 > Web前端 > HTML

简单点说!![]==true和[]==true导致思考

时间:2023-04-02 18:40:06 HTML

直接说明问题!![]==true//结果为真[]==true//结果为false![]==[]//结果为真为什么会出现这种情况?首先,如果你看到这些代码,你可以想到等于运算符(==),当两个操作数类型不同时进行的转换,那么你就接近答案了。别浪费时间了,我们需要知道JavaScript中一些特殊的类型转换,最好记住!!![]转换为字符串是""//String([])返回""[]转换为数字是0//Number([])返回0[]转换为布尔值是true//Boolean([])Returntruetrueconvertedtonumberis1//Number(true)returns1falseconvertedtonumberis0//Number(false)returns0如果你想知道为什么,请点击这里。简单来说,一句一句的看JavaScript中的tostring()和valueOf()方法!![]==true//结果为true!(逻辑非),它会对操作数的布尔值取反,并且!!类型转换,将对应的类型转换为boolean类型那么我们来看一下,[]一次求反(![])返回false,再一次求反(!![])返回true。最终比较变成true==true自然结果为true[]==true//结果为false这里重点说说两个操作数不同类型时的相等运算符(==)。遵循的规则和类型转换1.如果一个值为null,另一个为undefined,则它们相等null==undefined//返回true2.如果一个值为数字,另一个为字符串,则先将字符串转换为一个数字,然后使用转换后的值进行比较。1=="1"//1==1//结果为true2=="1"//2==1//结果为false3,如果其中一个值为true,则转为1并比较。如果其中一个值是false,在比较之前将其转换为0。"1"==true//1==1结果为true0==false//0==0结果为true4.如果一个值是对象,另一个是数字或字符串,则将对象转换为原始值,然后进行比较。通过toString()方法或valueOf()方法将对象转换为原始值。JavaScript语言核心中的内置类首先尝试使用valueOf(),然后再尝试使用toString()。除日期类外,日期类只能使用toString()进行转换。不属于JavaScript语言核心的对象通过各自实现中定义的方法转换为原始值。原始值:不可变的值,包括undefined、null、Boolean、number、string。所有对象都有toString()和valueOf()方法。toString()方法的作用是返回一个反映这个对象的字符串。valueOf()方法的作用是,如果一个对象有任何原始值,它会默认将该对象转换为表示它的原始值。5.其他不同类型之间的比较不平等。好了,我们知道了这些规则之后,再来看代码行[]==true//结果为falsetrue会被转换为1[]会被转换为0最后比较的是0==1,所以theresultisfalse理解为上面的内容,那么![]==[]//Theresultistrue这行代码很好理解![],即[]先转换为布尔值(true),然后取反,就是false,false变成一个数,就是0[]变成一个数,就是0,最后就是0==0,所以结果为true。综上所述,[]变成一个数字,就是0,变成一个布尔值,就是true,但这并不意味着0变成一个布尔值是true,而是false,就是false,false。这篇文章主要讲隐式转换。根据上面三行代码,还可以写出一些其他的,看看下面这些有趣的代码。[]==0//返回结果为真![]==0//返回结果为真[]==''//返回结果为真![]==''//返回resultisfalse''==true//返回结果为false文章不长主要是把开头说的问题说清楚。最后推荐两篇相关文章,希望对大家有所帮助。简单的说,JavaScript中的tostring()和valueOf()方法,通过JS的隐式转换,可以在关键时刻救你一命