首页 > 其他分享 >JS 类型转换,你真的懂了吗?

JS 类型转换,你真的懂了吗?

时间:2024-12-20 13:31:42浏览次数:6  
标签:类型转换 console log NaN Number JS 123 false 真的

文章目录


一、JavaScript 类型体系

在 JavaScript 编程里,类型转换是关键纽带。于数据交互、运算、逻辑判断及适应环境等皆不可或缺。它像一把关键钥匙,连通不同数据类型,助力开发者精准处理数据,是构建强大应用的必备核心,掌控它才能在编码之途畅行

ES6 前的类型分类

(1)简单数据类型(Primitive) :

此类数据存储于栈内存,采用拷贝式赋值机制。当进行赋值操作时,会直接复制数据值,新变量与原变量相互独立,对新变量的修改不会影响原变量。例如:

let num1 = 5;
let num2 = num1;
num2 = 10;

此时 num1 仍为 5

基本类型包含以下几种:

String(字符串)
Number(数字)
Boolean(布尔值)
Null(空值)
Undefined(未定义)

(2)复杂数据类型(Object) :

存储在堆内存,通过引用式赋值。这意味着多个变量可指向同一对象,当其中一个变量修改对象属性时,其他指向该对象的变量所获取的属性值也会随之改变。例如:

let obj1 = {name: 'Alice'};
let obj2 = obj1;
obj2.name = 'Bob';

此时 obj1.name 也变为 'Bob'

二、类型改变的缘由与机制

1. 类型改变的根源

JavaScript 作为弱类型语言,变量类型具有动态可变性。这要求开发者在编程中精确判定变量的实际类型,以保障程序逻辑的正确性与稳定性。例如,在函数参数传递过程中,可能传入不同类型的数据,函数内部需依据数据类型进行相应处理。

2. 类型转换方向

(1) 简单数据类型转换

如 Boolean 类型转换存在明确规则。除 false 外,+/-0(正负零)、NaN(非数字值)、空字符串 ''null(空值)、undefined(未定义)在显式转换为 Boolean 类型时,均被视作 false。例如:Boolean(0) 结果为 falseBoolean('') 同样为 false。其他非空字符串、非零数字等则转换为 true

console.log(Boolean(false))
console.log(Boolean(+0)
console.log(Boolean(-0))
console.log(isNaN(NaN))
console.log(Boolean(''))
console.log(Boolean(null))
console.log(Boolean(undefined))

(2) 复杂类型转换

对象类型也可转换为其他类型,不过其转换规则因目标类型而异,通常会依据对象的内部结构与属性值进行相应转换计算,在实际应用中需依据具体场景灵活处理。

三、类型转换函数详述

1. Number () 转换规则

依据规范 15.7.1.1 Number([value]),若提供 value,则经 ToNumber(value) 计算返回 Number 值(非 Number 对象);未提供时返回 +0。对不同输入的转换结果各异。
在这里插入图片描述

例如:数字字符串 '123'Number('123') 转换为数字 123;布尔值 true 转换为数字 1(即 Number(true));null 转换为 0Number(null));无法转换的字符串(如 'abc')则返回 NaN

console.log(Number('123'))  //输出数字 123
console.log(Number(null))  //输出数字 0
console.log(Number(true))  //输出数字 1
console.log(Number('abc'))  //输出 NaN

在数值计算、数据类型统一处理场景中,Number() 函数发挥关键作用,确保数据以数字形式参与运算,提升计算的准确性与一致性。

2. String () 转换规则

遵循规范 15.5.1.1 String([value]),通过 ToString(value) 计算返回 String 值(非 String 对象),无 value 时返回空字符串 ""
在这里插入图片描述

如数字 123String(123) 转换为字符串 '123';布尔值 false 转换为字符串 'false'(即 String(false))。

console.log(String(123))  //输出字符串 123
console.log(String(false))  //输出字符串 false

在数据拼接、输出展示及与字符串处理方法协作场景下,String() 函数不可或缺,保证数据以字符串形式呈现,满足多样化的文本处理需求。

四、特殊数值处理要点

1. 正负零区分+0-0 虽数值相等,但在特定运算场景下有差异。

借助 Object.is() 方法可精准区分,如 Object.is(+0, -0) 返回 false。在除法运算中,1/+0 结果为 Infinity(正无穷),1/-0 结果为 -Infinity(负无穷)。

console.log(1 / +0);   //输出正无穷 Infinity
console.log(1 / -0);   //输出负无穷 -Infinity
console.log(Object.is(5,5));   //输出 true
console.log(Object.is(+0,-0));   //输出 false

这种差异在涉及极限计算、数值比较与精度控制的复杂数学运算及科学计算场景中至关重要。

3. NaN 特性与判断NaN 属于 Number 类型,用于表示无效或未定义的数学运算结果。

Math.sqrt(-1) 会返回 NaN
通过 isNaN() 函数可判定一个值是否为 NaN。例如:isNaN('abc') 结果为 true,因为字符串 'abc' 无法转换为有效数字而被视作 NaNisNaN(123)false,表明 123 是有效数字。在数据处理与验证环节,有效识别 NaN 可规避错误数据传播,确保计算结果的准确性与可靠性。

console.log(Math.sqrt(-1))   //输出 NaN

console.log(typeof(NaN))  //输出 number
证明 NaN 为数字类型

console.log(NaN === NaN)//NaN不代表确切值  输出 false
//不能通过===NaN 判断 使用 isNaN
console.log(isNaN(NaN))  //输出 true

console.log(isNaN('abc'))  //输出 false
证明'abc'无法转换为数字类型

console.log(isNaN('abc'))  //输出 true
证明 123 是有效数字类型

五、深入思考

欲深入了解 JavaScript 知识细节,MDN 官网无疑是绝佳去处。该网站知识全面、精准权威,示例丰富多样,讲解深入浅出。从基础概念到进阶技巧,从函数特性到实践要点,皆提供细致入微的指导。在此,大家能尽情探索、收获知识,依凭官网深厚底蕴强化根基、提升技能,充分释放 JavaScript 编程潜能,为打造优质代码筑牢坚实基础、拓展广阔视野,踏上高效开发的精彩之旅。

(MDN官网)

如果您觉得这篇文章对您有帮助,欢迎点赞

标签:类型转换,console,log,NaN,Number,JS,123,false,真的
From: https://blog.csdn.net/qq_74852259/article/details/144537462

相关文章

  • JS信息收集
    免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!!附:完整笔记目录~ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正!2.4JS信息收集引子:上一篇所介绍源码信息收集,主要针对目标站点不可见的后端源码进行收集,往往能收集到的概率小但危害......
  • 师生交流系统|Java|SSM|JSP|
                   【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apache......
  • 少儿编程教育系统|Java|SSM|JSP| 
                            【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服......
  • 新闻发布系统|Java|SSM|JSP| 
                 【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetomcat......
  • 师生交流系统|Java|SSM|JSP| 
                            【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服......
  • 少儿编程教育系统|Java|SSM|JSP| 
                            【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服......
  • 网络直播带货查询系统:SSM 框架的 JAVA 设计与 JSP 开发实现
    第三章系统分析3.1系统设计目标网络直播带货网站主要是为了用户方便对商品信息的了解以及查看商品分类和查看订单信息,也是为了更好的让管理员进行更好存储所有数据信息及快速方便的检索功能,对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户的可操......
  • 支持移动手机的纯js lightbox插件GLightbox
    GLightbox是一款支持移动手机的纯jslightbox插件。GLightbox可以支持图片,视频,内联内容和iframes等,非常强大。 在线演示 下载 使用方法在页面中引入glightbox.css和glightbox.js文件。<linkhref="glightbox.css"rel="stylesheet"><scriptsrc="glightbox.js"type=......
  • ssm+jsp794学生工作管理系统设计与实现
    博主介绍:专注于Java(springbootssm等开发框架)vue .net phpphythonnode.js  uniapp微信小程序等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟我的博客空间发布了1600+毕设......
  • vue.js框架概述
    vue.js框架是什么Vue.js是一个用于构建用户界面的渐进式JavaScript框架。它被设计为能够轻松地被集成进项目的部分功能,或者用于构建完整的前端应用。Vue.js的核心库只关注视图层,使得它非常容易学习,并且能够和其他库或已有项目整合。同时,Vue.js也完全能够支持构建复杂的单......