类型转化

最新的 ECMAscript 标准定义了7种数据类型
原始类型:Boolean、Null、Undefined、Number、String、Symbol「ES6 新增」 对象:Object

数据类型

  • 显式类型转换 「手动执行」

    • Number 函数

      1. 原始类型转换
          - 数值:转换后还是原来的值。
          - 字符串:如果可以被解析为数值,则转换为相应的数值,负责得到 NaN。空字符串转为 0。
          - 布尔值:ture 转为 1,false 转为 0。
          - undefined:转为NaN。
          - null:转成 0。
      2. 对象类型转化
          - 先调用对象自身的 valueOf  方法,如果该方法返回原始类型的值「数值、字符串和布尔值」,则直接对该值使用 Number 方法,不再进行后续步骤。
          - 如果 valueOf 方法返回符合类型的值,再调用对象自身的 toString 方法,如果 toString 方法返回原始类型的值,则对该值使用 Number 方法,不再进行后续步骤。如果 toString 方法返回复合类型的值,则报错。
    • String 函数

      1. 原始类型转换
          - 数值:转为相应的字符串。
          - 字符串:转换后还是原来的值。
          - 布尔值:ture 转为「ture」,false 转为「false」。
          - undefined:转为「undefined」。
          - null:转为「null」。
      2. 对象类型转化    
    • Boolean 函数

      1. 原始类型转换
          - undefined:
          - null:
          - -0:
          - +0:
          - NaN:
          - ''空字符串
          - 以上全部转化为 false,其他都转换为 ture。
      2. 对象类型转化    
          - 先调用对象自身的 toString  方法,如果该方法返回原始类型的值,则直接对该值使用 String 方法,不再进行后续步骤。
          - 如果 toString 方法返回符合类型的值,再调用对象自身的 valueOf 方法,如果 valueOf 方法返回原始类型的值,则对该值使用 String 方法,不再进行后续步骤。如果 valueOf 方法返回复合类型的值,则报错。
  • 隐式类型转换 「程序内部执行」

    • 四则运算
    • 判断语句
    • Native 调用「alert、console.log」
    • typeof

表达式返回值
typeof undefined'undefined'
typeof null'object'
typeof true'boolean'
typeof 123'number'
typeof "abc"'string'
typeof function() {}'function'
typeof {}'object'
typeof []'object'
typeof unknownVariable'undefined'

实例:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>类型转换</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="main.js"></script>
</head>

<body>
    <script type="text/javascript">
        // Number 函数:转换成数值
        // 转化后还是原来的值
        console.log(Number(324)); // 324
        // 如果可以被解析为数值,则转换为相应的数值,负责得到 NaN。空字符串转为 0。
        console.log(Number("324")); // 3224

        console.log(Number("324abc")); // NaN

        console.log(Number("")); // 0
        // ture 转为 1,false 转为 0。
        console.log(Number(false)); // 0
        // 转为NaN
        console.log(Number(undefined)); // NaN
        // 转为0
        console.log(Number(null)); // 0
        var a = {
            a: 1
        }
        console.log('a', Number({
            a: 1
        }));
    </script>

    <script type="text/javascript">
        //String  函数
        // 数值:转为相应的字符串。
        console.log(String(123)); // "123"

        // 字符串:转换后还是原来的值。
        console.log(String("abc")); // "abc"

        // 布尔值:ture 转为「ture」,false 转为「false」。
        console.log(String(true)); // "true"

        // undefined:转为「undefined」。
        console.log(String(undefined)); // "undefined"

        // null:转为「null」。
        console.log(String(null)); // "null"

        var b = {
            b: 1,
            toString: function () {
                return {
                    b: 2,
                };
            },
            valueOf: function () {
                return 'b';
            },
        };
        console.log('b', String(b));
    </script>

    <script type="text/javascript">
        // 以下六个值的转化结果为false,其他的值全部为true。
        // undefined
        // null
        // -0
        // +0
        // NaN
        // ''(空字符串)
        console.log(Boolean(undefined)); // false

        console.log(Boolean(null)); // false

        console.log(Boolean(0)); // false

        console.log(Boolean(NaN)); // false

        console.log(Boolean('')); // false

        var b = {
            b: 1,
            toString: function () {
                return {
                    b: 2,
                };
            },
            valueOf: function () {
                return 'b';
            },
        };
        console.log('b', String(b));
    </script>
</body>

</html>

spoiler
94 声望8 粉丝

因为在奔跑 所以耳边有风🍃


« 上一篇
DOM 事件类
下一篇 »
HTTP协议类