JavaScript

JS类型转换(强制类型转换+隐式类型转换)

下文笔者讲述JavaScript中强制类型转换和隐式类型转换说明,如下所示

JavaScript数据类型简介

JavaScript中有五种基本数据类型
  (String、Number、Boolean、Function、Symbol)
 三种对象类型(其中包括 Object、Date、Array)和两种特殊类型(其中包括 Null、Undefined)
 
 不同的类型之间运算需要先对数据的类型进行转换
 类型转换是将一种数据类型转换为另一种数据类型的过程

 下文笔者将讲述两种不同的类型转换
 (隐式类型转换和强制类型转换)
 如下所示

JS隐式类型转换

隐式转换即自动转换
  如:字符串和数字相加,会自动转换
例:
var str = "https://www.linux28.com/";
var num = 88;
var res = str + num;
document.write(typeof res);  // 输出:string
document.write(res);         // 输出:https://www.linux28.com/88
JavaScript中
  表达式中包含以下运算符时,会发生隐式类型转换:
算术运算符:加(+)、减(-)、乘(*)、除(/)、取模(%);
逻辑运算符:逻辑与(&&)、逻辑或(||)、逻辑非(!);
字符串运算符:+、+=。
document.write("3" - 2);           // 输出:1
document.write("3" + 2);           // 输出:"32"
document.write(3 + "2");           // 输出:"32"
document.write("3" * "2");         // 输出:6
document.write("10" / "2");        // 输出:5
document.write(1 + true);          // 输出:2
document.write(1 + false);         // 输出:1
document.write(1 + undefined);     // 输出:NaN
document.write(3 + null);          // 输出:3
document.write("3" + null);        // 输出:"3null"
document.write(true + null);       // 输出:1
document.write(true + undefined);  // 输出:NaN
通过以上示例,我们可以得出以下结论
字符串加数字,数字会转换为字符串;
数字减字符串,字符串会转换为数字
    如果字符串无法转换为数字(例如"abc"、"JavaScript"),则会转换为 NaN;
字符串减数字,字符串会转换为数字
    如果字符串无法转换为数字,则会转换为 NaN;
乘、除运算时,也会先将字符串转换为数字。

JS 强制类型转换

强制转换
  需要我们开发人员使用指定的函数进行转换
   如:
    Number()、Boolean()、parseInt()、parseFloat() 等函数对数据进行转换

使用Number() 函数

Number() 函数的语法格式如下:
Number(value);
document.write(Number("10.8"));  // 输出:10.8
document.write(Number(true));    // 输出:1
document.write(Number(false));   // 输出:0
document.write(Number(null));    // 输出:0

Number()函数注意事项

如果参数中只包含数字,将转换为十进制数字
    忽略前导 0 以及前导空格
如果数字前面有负(-)号,则-会保留在转换结果中
如果数字前面有加(+)号,转换后会删掉+号;


如果参数中包含有效浮点数字,将转换为对应的浮点数字,
   忽略前导 0 以及前导空格,同样对于数字前的正负号,会保留负号忽略正号;

如果参数中包含有效的十六进制数字
   将转换为对应大小的十进制数字;

如果参数为空字符串,将转换为 0;

如果参数为布尔值
   则将 true 转换为 1,将 false 转换为 0;

如果参数为 null,将转换为 0;

如果参数为 undefined,将转换为 NaN;

如果参数为 Date 对象
   将转换为从 1970 年 1 月 1 日到执行转换时的毫秒数;

如果参数为函数、包含两个元素以上的数组对象
   以及除 Date 对象以外的其他对象,将转换为 NaN;

如果在参数前面包含了除空格、+和-以外的其他特殊符号或非数字字符
   或在参数中间包含了包括空格、+和-的特殊符号或非数字字符,将转换为 NaN

使用parseInt()函数

parseInt() 函数的语法格式如下:
parseInt(string, radix);
   string 为要转换的值
     当参数不是一个字符串,则会先将其转换为字符串,字符串开头的空白将会忽略
    radix 为一个可选参数,指字符串的基数,取值范围在 2 到 36 之间
   如:
    将radix参数设置为16
     则表示将 string 转换为一个十六进制数
parseInt()函数注意事项:
   解析字符串时,会忽略字符串前后的空格
    如果字符串第一个字符为负号(-),
	  那么负号会保留在转换结果中
    如果字符串第一个字符为正号(+),那么转换后将忽略正号;

    如果字符串前面为除空格、正号(+)、负号(-)以外的特殊符号
	   或除 a~f(或 A~F)之外的非数字字符,那么字符串将不会被解析,返回结果为 NaN;
    在字符串中包含空格、小数点(.)等特殊符号或非数字的字符时
	   解析将在遇到这些字符时停止,并返回已解析的结果;
    
	如果字符串是空字符串
     返回结果为 NaN。
document.write(parseInt("1101",2));   // 输出:13
document.write(parseInt("a37f",16));  // 输出:41855
document.write(parseInt("123"));      // 输出:123
document.write(parseInt("  123"));    // 输出:123

parseFloat()函数

parseFloat() 函数的语法格式如下:
parseFloat(string);
   string:
      为要被转换为浮点数的值
   当转换失败,则会返回 NaN。
  parseFloat()函数时,注意事项
   
   如果在解析的过程中遇到了正号(+)、负号(-)、数字(0-9)、小数点(.)
     或科学计数法中的指数(e 或 E)以外的字符
   则会忽略该字符以及之后的所有字符,并返回解析到的浮点数;
   
   解析过程中若遇到多个小数点
     则会在解析到第二个小数点时停止
     并返回第二个小数点之前的解析结果;
   
   解析过程中会忽略参数开头或末尾的空白字符;
   
   当参数的第一个字符不能被解析为数字,则会返回 NaN。
document.write(parseFloat("312.456"));  // 输出:312.456
document.write(parseFloat("-3.12"));    // 输出:-3.12
document.write(parseFloat("+3.12"));    // 输出:3.12
document.write(parseFloat(".12"));      // 输出:0.12