JavaScript 之所以会发生类型转换,是因为它是弱类型的语言。这使得JS中的变量数据不是固定的,会根据上下文自行发生改变。这种灵活性让开发人员能够更加快速地编写代码,但也带来了潜在的复杂性和意外。
类型概览
在ES5时期,JavaScript有5种原始数据类型(Number 、String 、Boolean 、Null 、Undefined )和1种引用数据类型(Object)。原始数据类型是拷贝式赋值,存储的是值本身;引用式数据类型是引用式赋值,存储的是指向值的指针。
基本数据类型之间的显示类型转换之Boolean
JS 的简单数据类型都有构造函数类型,在发生类型转换的时候会当成构造函数来用。Boolean() 是将任何类型的值转化成布尔类型(只有 ture 或 false )的方法.如果没有传递任何参数或者传递特定"假值"(falsy values),它会返回 false ;剩下的都会返回 true。来看些例子:
            
            
              JavaScript
              
              
            
          
          console.log(Boolean())// 默认值为false
console.log(Boolean(false))
console.log(Boolean(undefined))// false
console.log(Boolean(null))// false
console.log(Boolean(+0),'+0')/// false
console.log(Boolean(-0),'-0')// false
console.log(Boolean(NaN),'NaN')// false 非数字
console.log(Boolean(""),'""')// false以上的输出结果都为 false,不知道你有没有看迷糊。 我们来详细解析下:
- 第一个是没有提供任何参数,默认返回 false。
- 第二个则是直接将假值 false直接传递给Boolean,当然是返回false。
- 第三个中 undefined是一种特殊值,表示变量未定义。在布尔上下文中,它是假值。
- 第四个中 null表示空值或不存在的对象,在布尔上下文中也被视为假值。
- 第五和第六中的 +0和-0分别表示从正方向无限趋近于0和负方向无限趋近于0。在某些情况下会有所不同,但在这都表示假值。
- 第七个中 NaN的意思是 "这不是一个数字"(Not-a-Number),是JavaScript中的特殊值。尽管它的类型是Number,但在布尔中仍被视为假值。
- 第八个传入空字符串,在布尔上下文中被视为假值。而非空字符串则是真值。
Boolean()的转换小结
对于那些传入 false、 undefined、 null、 +0、 -0、 NaN 和空字符串 ""以及不传入参数的特殊情况,一律返回 false,剩下的都是返回 true。
基本数据类型之间的显示类型转换之Number
Number()和Boolean()类似,只不过Number()是将任何类型的值转换成数字。来看代码:
            
            
              JavaScript
              
              
            
          
          console.log(Number())// 0
console.log(Number(undefined))// NaN 未定义 无法转换 undefined 在数值上下文中没有转换成一个特定数字的含义
console.log(Number(null))// 0 定义了 为空
console.log(Number(false))// 0 在数值上下文中,false 被转换为0
console.log(Number(true))// 1
console.log(Number('123')) // 123
console.log(Number('-123'))// -123以上代码的输出结果中比较特别的一点是,为什么传入undefined的返回值会是NaN? 这是因为undefined 表示一个未赋值的状态,在数值上下文中没有明确的意义,所以Number(undefined) 返回 NaN(Not-a-Number)。
除此之外,还有一些比较特别的存在:
            
            
              JavaScript
              
              
            
          
          console.log(Number('0x11'))// 17
console.log(Number(''),Number(""))// 0 0
console.log(Number('100a'))// 100- 传入的字符串以0x开头时,JS会将其视为十六进制数值并进行转化计算。
- 当传入空字符串时,不管是''或"",JS都会认为空字符串没有数值意义,默认转化成0。
- 传入像100a这种特别的字符串时,Number()会开始解析直到遇到第一个无法识别为数字的字符为止。但如果像a100这种,它就会直接返回NaN。
Number()的转换小结
- 未定义 (undefined) :转换为NaN,因为undefined在数值上下文中没有意义。
- 空值 (null) :转换为0,表示"空"或"不存在"。
- 布尔值 :false转换为0,true转换为1。
- 字符串 :如果字符串可以被解析为合法的数值,则转换为相应的数值;否则,转换为 NaN。以'0x'或'0X'开头,则按照十六进制规则进行转换。而空字符串被转换为0。
- 混合合法与非法字符的字符串 :Number()会尽可能多地解析合法的数字部分,一旦遇到非法字符即停止解析。如果开头就有非法字符,则返回NaN。
基本数据类型间的显示类型转换之String
String()是将任意类型的值转换成字符串。话不多说,来看代码:
            
            
              JavaScript
              
              
            
          
          console.log(String())
console.log(String(undefined),typeof String(undefined)) //"undefined" "string"
console.log(String(null),typeof String(null)) //"null" "string"
console.log(String(+0),String(-0))//"0" "-0"
console.log(String(NaN)) //"NaN"
console.log(String(1)) //"1"以上代码中比较特别的存在就是 0和-0。在大多数情况下会被认为是同一个数,但在JS中被String()转换时,会分别返回0和-0。这是因为在IEEE 754 浮点数标准,该标准明确规定了正零 (+0) 和负零 (-0) 的存在。
String()的转换小结
- 无参数 :返回空字符串 ""。
- undefined:转换为字符串- "undefined"。
- null:转换为字符串- "null"。
- 特殊数值 (+0,-0,NaN) :根据具体情况转换为相应的字符串表示。
- 普通数值:直接转换为对应的字符串表示。
通过以上对 Boolean()、Number()和String()的类型转换进行简单介绍,想必对简单数据类型的类型转换有了一定了解。了解和掌握数据类型的转换,可以帮助我们更精确地控制他们的 JavaScript 程序,并写出更加健壮且易于维护的代码。
菜鸟创作不易,还望善良的大佬多点点赞。