JavaScript基本数据类型自动转化

51 阅读5分钟

一、数据类型的转化

  1. 原理

    • JavaScript是一门弱类型计算机语言
    • 所谓的弱类型计算机语言,指的是JavaScript这门语言语法结构比较松散
    • 不如强类型的计算机语言语法结构严谨
  2. 解释说明

    • 定义变量时,强类型计算机语言会先定义变量,设定变量储存数据的数据类型,再向变量中赋值存储的数据
      • 简单说来:也就是强类型计算机语言变量的定义分成两步
        • 第一步:定义变量设定数据类型
        • 第二步:向变量中存储数据
      • 如果赋值的数据和变量设定的数据类型不符合,不能向变量中赋值数据
    • 定义变量时,弱类型计算机语言,对于变量储存数据的数据类型没有任何的限制
      • 简单来说:也就是一个变量中可以存储任意类型的数据
      • 也就是弱类型计算机语言,可以在声明变量时,同时给变量赋值存储的数据,在变量中可以存储任意类型的数据
  3. 总结

    • 在计算机程序中,有些计算机程序执行时,需要指定的数据类型参与程序执行
    • 弱类型计算机员中,变量可以存储任意类型的数据
    • 在程序执行时,需要将变量中存储的数据类型转化为指定的数据类型,才能让程序正确执行

二、数据类型自动转化

  • 方式
    • 自动转化/隐式转化
      • 程序执行时,自动完成的数据类型转化
    • 强制转化
      • 程序员人为完成的数据类型转化
  • 关键点
    • 什么时候转化
    • 转化原则

1.自动转化为字符串类型

  1. 什么时候转化
    • 字符串拼接时,其他数据类型转化为字符串类型
    • 理论上,执行字符串拼接时,+(加号)两侧都应该是字符串类型
    • 如果是其他数据类型,需要先转化为字符串类型,再执行字符串拼接操作
  2. 转化原则
    • 将数据转化为对应的字符串内容

  • 案例分析:
    1. 将布尔类型true转化为字符串类型true
    2. 再和字符串'北京'进行拼接操作
    3. 拼接结果是'北京true'
        console.log( '北京' + true ) ;        //北京true
    
          console.log("北京" + true); //北京true
          console.log("北京" + false); //北京false
    
          console.log("北京" + 100); //北京100
          console.log("北京" + 100.123); //北京1100.123
    
          console.log("北京" + 2e3); // 将2e3解析为对应的数值2000   北京2000
          console.log("北京" + NaN); //北京NaN
    
          console.log("北京" + null); //北京null
          console.log("北京" + undefined); //北京undefined
    

2. 自动转化为数值类型

  1. 什么时候转化:算数运算时
    • 执行算数运算时, 运算符两侧理论上应该都是数值类型
    • 如果不是数值类型,需要先转化为数值类型,再执行运算
  2. 转化原则
    • 转化为1:true
    • 转化为0:false 、null 、'' 、 空字符串
    • 转化为对应的数值:字符串内容符合数值语法( 整数、浮点数、科学计数法 )
    • =转化为NaN:undefined(字符串内容不符合数值语法),运算结果是NaN

  1. 转化为1

    // true ---- 数值1
    console.log( 100 - true );    //99
    
  2. 转化为0

            // false ---- 数值0
            console.log( 100 - false );   //100
    
            // null ---- 数值0
            console.log( 100 - null );    //100
    
            // 空字符串 ---- 数值0
            console.log( 100 - '' );      //100
    
            // 字符串内容只有空格 ---- 数值0
            console.log( 100 - '  ' );   //100
    
  3. 转化为对应的数值

    • 案例分析
      1. 字符串的内容,也就是定界符中的内容
      2. 是不是符合数值的语法形式
      3. 如果符合,就转化为对应的数值
      4. 字符串'100'内容,符合数值语法规范转化为数值100
        console.log( 100 - '100' ) ;       //  0
        console.log( 100 - '100.123' ) ;   //  -0.12300000000000466
        console.log( 100 - '2e3' ) ;       // -1900
    
  • 注意:如果是+加号,有字符串参与执行的是字符串拼接,不是加法运算

            // 执行字符串拼接操作,不是执行加法运算
            console.log( 100 + '100' ) ;   //100100
    
  1. 转化为NaN

        // 1、undefined准化为数值类型,转化结果是NaN
        // 2、执行100 - undefined操作,也就是100 - NaN操作 
        // 3、有NaN参与的运算,执行结果还是NaN
        console.log(100 - undefined); //NaN   
    
        // 1、字符串'北京'转化为数值类型,转化结果是NaN
        // 2、执行100 - '北京'操作,也就是100 - NaN操作
        // 3、有NaN参与的运算,执行结果还是NaN 
        console.log(100 - '北京'); //NaN   
        console.log(100 - '100a'); //NaN   
    

3. 自动转化为布尔类型

  1. 什么时候转化:
    • if( )语句、逻辑运算符、三元运算符
  2. 转化原则
    • false:0、0.0000 、' ' 、null、undefined、NaN
    • true:其他所有情况都是转化为 true

  1. 转化为 false

          // 转化为false的情况
          if (0) {
            console.log("()中表达式结果转化为 true 执行的程序");
          } else {
            console.log("()中表达式结果转化为 false 执行的程序");
          }
    
          if (0.0) {
            console.log("()中表达式结果转化为 true 执行的程序");
          } else {
            console.log("()中表达式结果转化为 false 执行的程序");
          }
    
          if (NaN) {
            console.log("()中表达式结果转化为 true 执行的程序");
          } else {
            console.log("()中表达式结果转化为 false 执行的程序");
          }
    
          if (undefined) {
            console.log("()中表达式结果转化为 true 执行的程序");
          } else {
            console.log("()中表达式结果转化为 false 执行的程序");
          }
    
          if (null) {
            console.log("()中表达式结果转化为 true 执行的程序");
          } else {
            console.log("()中表达式结果转化为 false 执行的程序");
          }
    
          if ("") {
            console.log("()中表达式结果转化为 true 执行的程序");
          } else {
            console.log("()中表达式结果转化为 false 执行的程序");
          }
    
  2. 转化为true

          // 转化为 true 的情况
          if ("  ") {
            console.log("()中表达式结果转化为 true 执行的程序");
          } else {
            console.log("()中表达式结果转化为 false 执行的程序");
          }
    
          if (1) {
            console.log("()中表达式结果转化为 true 执行的程序");
          } else {
            console.log("()中表达式结果转化为 false 执行的程序");
          }