一、数据类型的转化
-
原理
- JavaScript是一门弱类型计算机语言
- 所谓的弱类型计算机语言,指的是JavaScript这门语言语法结构比较松散
- 不如强类型的计算机语言语法结构严谨
-
解释说明
- 定义变量时,强类型计算机语言会先定义变量,设定变量储存数据的数据类型,再向变量中赋值存储的数据
- 简单说来:也就是强类型计算机语言变量的定义分成两步
- 第一步:定义变量设定数据类型
- 第二步:向变量中存储数据
- 如果赋值的数据和变量设定的数据类型不符合,不能向变量中赋值数据
- 简单说来:也就是强类型计算机语言变量的定义分成两步
- 定义变量时,弱类型计算机语言,对于变量储存数据的数据类型没有任何的限制
- 简单来说:也就是一个变量中可以存储任意类型的数据
- 也就是弱类型计算机语言,可以在声明变量时,同时给变量赋值存储的数据,在变量中可以存储任意类型的数据
- 定义变量时,强类型计算机语言会先定义变量,设定变量储存数据的数据类型,再向变量中赋值存储的数据
-
总结
- 在计算机程序中,有些计算机程序执行时,需要指定的
数据类型参与程序执行 - 弱类型计算机员中,变量可以存储
任意类型的数据 - 在程序执行时,需要将变量中存储的数据类型转化为指定的数据类型,才能让程序正确执行
- 在计算机程序中,有些计算机程序执行时,需要指定的
二、数据类型自动转化
- 方式
自动转化/隐式转化- 程序执行时,自动完成的数据类型转化
强制转化- 程序员人为完成的数据类型转化
- 关键点
什么时候转化转化原则
1.自动转化为字符串类型
- 什么时候转化
字符串拼接时,其他数据类型转化为字符串类型- 理论上,执行字符串拼接时,+(加号)两侧都应该是字符串类型
- 如果是
其他数据类型,需要先转化为字符串类型,再执行字符串拼接操作
- 转化原则
- 将数据转化为对应的字符串内容
- 案例分析:
- 将布尔类型true转化为字符串类型true
- 再和字符串'北京'进行拼接操作
- 拼接结果是'北京true'
console.log( '北京' + true ) ; //北京trueconsole.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:true - 转化为
0:false 、null 、'' 、 空字符串 - 转化为对应的
数值:字符串内容符合数值语法(整数、浮点数、科学计数法) - =转化为
NaN:undefined(字符串内容不符合数值语法),运算结果是NaN
- 转化为
-
转化为1
// true ---- 数值1 console.log( 100 - true ); //99 -
转化为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 -
转化为对应的数值
- 案例分析
- 字符串的内容,也就是定界符中的内容
- 是不是符合数值的语法形式
- 如果符合,就转化为对应的数值
- 字符串'100'内容,符合数值语法规范转化为数值100
console.log( 100 - '100' ) ; // 0 console.log( 100 - '100.123' ) ; // -0.12300000000000466 console.log( 100 - '2e3' ) ; // -1900 - 案例分析
-
注意:如果是+加号,有字符串参与执行的是字符串拼接,不是加法运算
// 执行字符串拼接操作,不是执行加法运算 console.log( 100 + '100' ) ; //100100
-
转化为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. 自动转化为布尔类型
- 什么时候转化:
- if( )语句、逻辑运算符、三元运算符
- 转化原则
false:0、0.0000 、' ' 、null、undefined、NaNtrue:其他所有情况都是转化为 true
-
转化为 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 执行的程序"); } -
转化为true
// 转化为 true 的情况 if (" ") { console.log("()中表达式结果转化为 true 执行的程序"); } else { console.log("()中表达式结果转化为 false 执行的程序"); } if (1) { console.log("()中表达式结果转化为 true 执行的程序"); } else { console.log("()中表达式结果转化为 false 执行的程序"); }