为啥js的==能自动转换类型呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥js的==能自动转换类型呢?相关的知识,希望对你有一定的参考价值。

你好,根据你的描述,我想你可以参考如下:

    ==符号在判断左右两边数据是否相等时,如果数据类型一致,直接比较值即可

    ==符号左右数据类型不一致时,如果两方数据为布尔型、数值型、字符串型时,不为数字的那一方自动调用Number()方法

Number(mix)使用方法如下

Number()使用规则


如果觉得满意,望采纳!提问者的点赞和采纳就是我们回答者的动力和追求,谢谢!

参考技术A 这里有个js的概念: 隐式类型转换。 当你使用比较运算符时,js会进行隐式类型转换。
如果你又问,为什么会隐式类型转换呢,那我只能回答:这是js语言本身的特性,内部约定的。
隐式类型转换是遵循一定原则的
1. 两个数字比较时是不存在隐式类型转换的
2. 数字和非数字比较时,会将非数字的一方隐式转换成数字,然后进行比较。
3. 两个字符串进行比较时, 会将其第一个字母转成对应的ASCII,然后进行比较, 比如 'a' > 'b', 会先将a 和 b 分别转换为其ASCII值: 97, 98, 因为 97 小于98,所以 'a' > 'b' 为 false。
4. 两个boolean 类型比较时,true会被转换成1,false 会被转换为 0。
5. 两个对象进行比较时,会先调用其 valueOf方法,然后再进行比较。

基本就这些了,更多这方面的知识,需要你自己去加深了解了。

这段代码里的Object类型为啥能被强制转换为Comparable接口类型呢?

public static void sort(Object[] arr){
        boolean sorted= true;
        int len = arr.length;
        for(int j=0;j<len-1;j++){
            sorted = true;
            for(int i=0;i<len-1-j;i++){
                if(((Comparable)arr[i]).compareTo(arr[i+1])==0){
                    Object temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                    sorted = false;
                }
            }
            if(sorted){
                break;
            }
        }


  编译器假设你强制类型转换的前提是你已经知道了可以这样做,即 (A)B 就表示 B 是 A 的子类或者 B 实现了 A 接口,
所以强制类型转换编译器并不会报错。至于 Object 为什么能转化为 Comparable —— 你应该这样想,这意味着某个类 X
实现了 Comparable 接口,然后 Object 又是所有类的父类,那么 Object obj = x; 肯定是可以,所以 obj 在内存中引用的是对象 x
;而 X 又实现了 Comparable,所以当然可以将 obj 引用的 x 转化为一个 Comparable

 

以上是关于为啥js的==能自动转换类型呢?的主要内容,如果未能解决你的问题,请参考以下文章

这段代码里的Object类型为啥能被强制转换为Comparable接口类型呢?

C语言双目运算符两边的运算数类型不一致系统自动转换的规则是啥?比如1.0/2=0.5那为啥不是1.0/2=0呢?

json中的String类型的日期为啥自动转换成date类型

Java 输出字符串对象时先转换成基本数据再转换成字符串,才输出,为啥不直接输出字符串对象呢

将string类型转换为decimal为啥会自动四舍五入

c#小灶——自动类型转换和强制类型转换