(共566篇)
全部分类

数据类型的隐式转换
[ JS基础 ] 

数据类型的隐式转换

上一节中,if语句中条件表达式的返回值如果不是布尔值,,JS 引擎偷偷的把表达式本身或者它的返回值转换成布尔值,这种转换过程,被称为“隐式转换”。

1
2
3
4
5
6
7
<script>
    if (1) {
        console.log(1);
    } else {
        console.log(2);
    }
</script>

案例源码

事实上,除了if,前面讲过的三元运算符,以及后面即将讲到的while,都可能发生数据类型的隐式转换。

1
2
3
<script>
    undefined ? console.log(1) : console.log(2);
</script>

案例源码

如果取反运算符!的后面跟着一个非布尔值数据类型,也会隐式转换为布尔值

1
2
3
<script>
    !undefined ? console.log(1) : console.log(2);
</script>

案例源码

注意:这里就要考虑到运算符的优先级关系了,上面的案例中,取反运算符的优先级大于三元运算符,所以会先执行取反运算符,判断三元运算符中的条件表达式结果,再执行三元运算符。

算数运算符中的隐式转换

原则上来说,算数运算符左右两边应该都是数值类型,所有的数据类型,都要转为数值再进行算数运算。但实际上按照运算符的不同,执行的结果也有所不同。

+运算符

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<script>
    console.log('2 + "abc"', "=", 2 + "abc");
    console.log('2 + "123"', "=", 2 + "123");

    console.log("2 + 123", "=", 2 + 123);
    console.log("2 + true", "=", 2 + true);
    console.log("2 + false", "=", 2 + false);
    console.log("2 + undefined", "=", 2 + undefined);
    console.log("2 + null", "=", 2 + null);

    console.log("2 + []", "=", 2 + []); // 在console面板中,输出的2是黑色文字,是一个字符串类型
    console.log("2 + [123]", "=", 2 + [123]);
    console.log("2 + [1,2]", "=", 2 + [1, 2]);

    console.log("2 + {}", "=", 2 + {});
    console.log("2 + { age: 18 }", "=", 2 + { age: 18 });
</script>

源码案例

- * / ==运算符:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<script>
    console.log('2 - "abc"', "=", 2 - "abc");
    console.log('2 - "123"', "=", 2 - "123");

    console.log("2 - 123", "=", 2 - 123);
    console.log("2 - true", "=", 2 - true);
    console.log("2 - false", "=", 2 - false);
    console.log("2 - undefined", "=", 2 - undefined);
    console.log("2 - null", "=", 2 - null);

    console.log("2 - []", "=", 2 - []); // 在console面板中,输出的2是黑色文字,是一个字符串类型
    console.log("2 - [123]", "=", 2 - [123]);
    console.log("2 - [1,2]", "=", 2 - [1, 2]);

    console.log("2 - {}", "=", 2 - {});
    console.log("2 - { age: 18 }", "=", 2 - { age: 18 });
</script>

源码案例