JavaScript 为什么 18==‘18’ 为true呢?

因为程序里面==符号会默认转换类型,字符串型会自动转换为数字型。

我们程序里有一个全等===与双等==不同

18===18 true

18===‘18’ false

双等于号比较的是值,三个等于号比较的是值和类型。如有帮助,请采纳。点击我回答右上角【采纳】按钮。

简单来说: == 代表相同, ===代表严格相同, 为啥这么说呢,

这么理解: 当进行双等号比较时候: 先检查两个操作数数据类型,如果相同, 则进行===比较, 如果不同, 则愿意为你进行一次类型转换, 转换成相同类型后再进行比较, 而===比较时, 如果类型不同,直接就是false.

参考:https://www.cnblogs.com/nelson-hu/p/7922731.html

img

https://www.jb51.net/article/99702.htm

js 是弱类型语言,平时可以自动转换类型,转换规则参考上边这个链接

js 中比较 == 是允许类型转换的,而 === 不允许类型转换,可以说 == 比较是在转换了类型后的值比较,而 === 是未转换类型的值比较

在不转换类型的情况下,类型不同自然不相等

==和===的区别一个只是值相等另一个全等(包括类型)

js 是一门神奇的语言,你可以试下,看看 0==“” 的执行结果

js是一个弱类型语言 在js中==比较的是内容并且会把两个对象给你做隐似转换 好比1 == '1'在js中使用==比较时他们会给这两个值转换类型使他们类型一致然后再去比较内容,或者说他们不会比较你是什么类型而只比较你的值 而===则不,他是既比较类型 又比较内容 如果类型不一致 直接就是false 类型一致才会比较值

两个等号会进行隐式类型转换

首先,纠正一个大部人的误区

究竟这个比的机制是怎么样的呢, 不应该是 ![]为false , 就变成了 [] == false,那么[]不应该隐式转换为true吗? 这样不就变成了 true == false 结果应该为false啊?

== 趋向于把类型不同的指转换为 number 类型进行比较,而不是 boolean 类型

对于

[]==![]
先将等号右边化简

[] == ![]
//=> [] == !Boolean([])
//=> [] == !true
//=> [] == false
等号两边的类型不同,需要进行类型转换
一般对象与非对象比较时,先尝试使用 valueOf 转换,再尝试使用 toString 转换

//=> [].valueOf() == false
//[] 的 valueOf 方法返回对象本身,仍然是一个引用值,所以尝试使用 toString 转换
//=> [].toString() == false
//=> ""==false
两边类型依然不同,且都为原始值,转换为数字进行比较

//=> Number("")==Number(false)
//=> 0==0
//=> true

这就是三个等号和两个等号的区别

两个等号的话 只比较内容 不比较类型 三个等号会判断类型