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