JavaScript基本数据类型强制转化

77 阅读4分钟

一、强制转化为布尔类型

  1. 什么时候转化
    • Boolean(变量/表达式);
    • 将变量/表达式的数据,转化为布尔类型。
    • 转化原则和自动转化完全相同
  2. 转化原则
    • false:0、0.000、NaN 、' ' 、null 、undefined
    • true:其他情况都转化为 true
      var num = 100;
      var num1 = 100.1;
      var num11 = 0;
      var num111 = -1;

      var num2 = "哈哈哈哈";
      var num3 = " ";
      var num33 = "";
      var num4 = "100";

      var num5 = undefined;
      var num6 = null;

      console.log(typeof Boolean(num), Boolean(num));
      console.log(typeof Boolean(num1), Boolean(num1));
      console.log(typeof Boolean(num11), Boolean(num11));
      console.log(typeof Boolean(num111), Boolean(num111));

      console.log("----------------------------------");

      console.log(typeof Boolean(num2), Boolean(num2));
      console.log(typeof Boolean(num4), Boolean(num4));
      console.log(typeof Boolean(num3), Boolean(num3));
      console.log(typeof Boolean(num33), Boolean(num33));

      console.log("----------------------------------");

      console.log(typeof Boolean(num5), Boolean(num5));
      console.log(typeof Boolean(num6), Boolean(num6));
image.png
  • 总结
    • 数字中, 除了0, 其他都会转为 true
    • 字符串中, 只有空字符串(不是空白字符串)会转为 false
    • undefined null 都会转为false

二、强制转化为字符串类型

  1. String( 变量/表达式 );
    • 转化原则和自动转化相同,不会改变变量中存储的原始数据
    • 任何数据类型都可以
  2. 变量.toString( );
    • 转化原则和自动转化相同,不会改变变量中存储的原始数据
    • 不能给undefined和null转换

1. String(变量/表达式 );

      var num = 100;
      var num1 = 100.1;
      var num2 = true;
      var num3 = false;
      var num4 = undefined;
      var num5 = null;

      console.log(typeof String(num), String(num)); //string 100
      console.log(typeof String(num1), String(num1)); //string 100.1
      console.log(typeof String(num2), String(num2)); //string true
      console.log(typeof String(num3), String(num3)); //string false
      console.log(typeof String(num4), String(num4)); //string undefined
      console.log(typeof String(num5), String(num5)); //string null

2. 变量.toString();

      var num = 100;
      var num1 = 100.1;
      var num2 = true;
      var num3 = false;
    
      console.log(typeof num.toString(), num.toString()); //string 100
      console.log(typeof num1.toString(), num1.toString()); //string 100.1
      console.log(typeof num2.toString(), num2.toString()); //string true
      console.log(typeof num3.toString(), num3.toString()); //string false
image.png
  • 语法前必须是变量,不能直接定义表达式或者数据
      // console.log( 100.toString() );   报错
      var a = 100;
      console.log(a.toString());

      // 如果变量储存的是整数可以定义进制
      console.log(a.toString(2));
  • 如果变量储存的是null或者undefined, 不支持toString() 语法
      var b = null;
      console.log(String(b)); //NaN

      // 变量.toString() 语法,不支持变量中存储null
      b.toString(); //报错

      var c = undefined;
      console.log(String(c)); //undefined

      // 变量.toString() 语法 不支持变量中存储undefined
      c.toString(); //报错

3. 隐式转行

      /* 隐式转行 */
      console.log(typeof (100 + ""), 100 + "");
      console.log(typeof (100.1 + ""), 100.1 + "");

三、强制转化为数值类型

  1. Number(要转换的数据)
  2. parseInt(要转换的数据) (只保留小数点前的, 小数点后的直接忽略)
  3. parseFloat(要转换的数据) (不会忽略小数点后的)

1. 强制转化为数值类型

  1. Number()
    • 强制转化为数值类型,转化原则和自动转化完全相同
  2. 转化原则
    • 1:true
    • 0:false、null、' ' 、' '
    • NaN:undefined,字符串内容不符合数字语法规范
      console.log(typeof Number(true), Number(true)); //number 1

      console.log(typeof Number(false), Number(false)); //number 0
      console.log(typeof Number(null), Number(null)); //number 0
      console.log(typeof Number(""), Number("")); //number 0
      console.log(typeof Number("  "), Number("  ")); //number 0

      console.log(typeof Number("100"), Number("100")); //number 100
      console.log(typeof Number("100.123"), Number("100.123")); //number 100.123
      console.log(typeof Number("2e3"), Number("2e3")); //number 2000

      console.log(typeof Number(undefined), Number(undefined)); //number NaN
      console.log(typeof Number("100px"), Number("100px")); //number NaN
      console.log(typeof Number("a123"), Number("a123")); //number NaN

2. parseInt():获取数据的整数部分

  • 如果是纯数字, 直接转为 number
  • 如果是纯字母, 直接转为 NaN
  • 如果是数字开头, 将开头的数组转为number, 后续的值忽略
  • 不能识别字符串的科学计数法
      console.log(typeof parseInt(true), parseInt(true)); //NaN
      console.log(typeof parseInt(false), parseInt(false)); //NaN
      console.log(typeof parseInt(null), parseInt(null)); //NaN
      console.log(typeof parseInt(undefined), parseInt(undefined)); //NaN

      console.log(typeof parseInt(100), parseInt(100)); //100
      console.log(typeof parseInt(100.123), parseInt(100.123)); //100

      console.log(typeof parseInt("100"), parseInt("100")); //100
      console.log(typeof parseInt("100px"), parseInt("100px")); //100
      console.log(typeof parseInt("100abc100"), parseInt("100abc100")); //100

      console.log(typeof parseInt(2e3), parseInt(2e3)); //2000
      console.log(typeof parseInt("2e3"), parseInt("2e3")); //2

3. parseFloat():获取数据的浮点数部分

  • 不会忽略小数点后的数字
  • 识别字符串的科学计数法
      console.log(typeof parseFloat(true), parseFloat(true)); //NaN
      console.log(typeof parseFloat(false), parseFloat(false)); //NaN
      console.log(typeof parseFloat(null), parseFloat(null)); //NaN
      console.log(typeof parseFloat(undefined), parseFloat(undefined)); //NaN

      console.log(typeof parseFloat(100), parseFloat(100)); //100
      console.log(typeof parseFloat(100.123), parseFloat(100.123)); //100.123

      console.log(typeof parseFloat("100"), parseFloat("100")); //100
      console.log(typeof parseFloat("100px"), parseFloat("100px")); //100
      console.log(typeof parseFloat("100abc100"), parseFloat("100abc100")); //100

      console.log(typeof parseFloat(2e3), parseFloat(2e3)); //2000
      console.log(typeof parseFloat("2e3"), parseFloat("2e3")); //2000

4. 隐式转行

      console.log(typeof (true - 0), true - 0); //number 1

      console.log(typeof (false - 0), false - 0); //number 0
      console.log(typeof (null - 0), null - 0); //number 0
      console.log(typeof ("" - 0), "" - 0); //number 0
      console.log(typeof ("  " - 0), "  " - 0); //number 0

      console.log(typeof ("100" - 0), "100" - 0); //number 100
      console.log(typeof ("100.123" - 0), "100.123" - 0); //number 100.123
      console.log(typeof ("2e3" - 0), "2e3" - 0); //number 2000

      console.log(typeof (undefined - 0), undefined - 0); //number NaN
      console.log(typeof ("100px" - 0), "100px" - 0); //number NaN
      console.log(typeof ("a123" - 0), "a123" - 0); //number NaN