JavaScript:隐式类型转换与显式类型转换

文章目录

  • 隐式类型转换(Implicit Type Conversion)
    • 1、字符串与数字的转换
    • 2、非布尔值到布尔值的转换
    • 3、在相等性比较中的转换
    • 4、对象到基础类型的转换
    • 5、在算术运算符中的其他转换
  • 显式类型转换(Explicit Type Conversion)
    • 1、Number():
    • 2、parseInt() 和 parseFloat():
    • 3、String():
    • 4、Boolean():
    • 5、Object():
    • 6、toString() 和 valueOf() :

JavaScript中的隐式类型转换和显式类型转换是JavaScript语言中处理不同数据类型相互作用时的重要概念。

隐式类型转换(Implicit Type Conversion)

隐式类型转换是指在不需要程序员明确指示的情况下,JavaScript自动将一个数据类型转换为另一个数据类型以适应特定的运算或操作。

1、字符串与数字的转换

当字符串与数字进行加法运算时数字会被隐式转换为字符串,然后进行字符串拼接

其他算术运算符(如 -、*、/、%)中,如果一个操作数是字符串,另一个是数字,JavaScript会尝试将字符串转换为数字。如果字符串不能被转换为数字,则会返回 NaN

"5" + 2; // 结果为 "52",字符串与数字相加时,数字被转换为字符串进行拼接

2、非布尔值到布尔值的转换

在条件语句(如 if、while)、逻辑运算符(如 &&、||、!)以及需要布尔值的上下文中,非布尔值会被转换为布尔值。
false0nullundefined 和空字符串(“”)转换为 false,
其他所有值(包括非零数字、非空字符串、对象、数组等)转换为布尔值时均为true

if (0) { // 0 被隐式转换为 falseconsole.log('Truthy');
} else {console.log('Falsy');
}

3、在相等性比较中的转换

使用相等运算符(==)时,如果两侧的操作数类型不同,JavaScript会尝试进行类型转换,使其可以比较。

而对于严格相等运算符(===),不会进行类型转换,类型不同的值会直接判断为不等。

5 == '5' //true
5 === '5' //false

4、对象到基础类型的转换

当对象需要被转换为基本类型时,JavaScript会尝试调用对象的 valueOf() 方法,如果返回的值不是一个基本类型,接着尝试调用 toString() 方法。
例如在 alert(obj) 时,如果 toString() 方法没有被重写,会调用默认的 toString() 方法返回一个字符串表示。

alert(obj) //[object Object]

如果要显示完整结构应该使用JSON.stringify

alert(JSON.stringify(obj))

5、在算术运算符中的其他转换

null:在算术运算(如 +、-、*、/ 等)中,null 会被转换为 0,但是如果是进行一元运算符 ++ 或 – 运算,会抛出 TypeError 错误。

undefined:在进行算术运算时,undefined 也不会直接转换为 0,而是会抛出 TypeError 错误。

console.log(null + 2); // 输出:2,null 被转换为了 0
console.log(undefined + 2); // 输出:NaN,undefined 被转换为了 NaNconsole.log(++null); // 报错:TypeError: Invalid left-hand side expression in postfix operation
console.log(++undefined); // 报错:TypeError: Cannot read property 'toString' of undefined

显式类型转换(Explicit Type Conversion)

显式类型转换是指程序员明确地将一个数据类型转换为另一个数据类型,通常通过使用转换函数来实现。

1、Number():

将字符串、布尔值或其他可转换的数据类型转换为数字。

let strNum = "123";
let num = Number(strNum); // num 现在是数字 123

2、parseInt() 和 parseFloat():

专门用于将字符串转换为整数或浮点数。
将字符串、布尔值或其他可转换的数据类型转换为数字。

let strInt = "123";
let int = parseInt(strInt, 10); // int 现在是整数 123
let strFloat = "3.14";
let float = parseFloat(strFloat); // float 现在是浮点数 3.14

3、String():

将数字、布尔值或其他可转换的数据类型转换为字符串。

let num = 123;
let str = String(num); // str 现在是字符串 "123"

4、Boolean():

将非布尔值转换为布尔值

let zero = 0;
let boolZero = Boolean(zero); // boolZero 现在是 false
let nonEmptyStr = "Hello";
let boolStr = Boolean(nonEmptyStr); // boolStr 现在是 true

5、Object():

可以将非对象转换为对象。对于原始类型,它会创建一个包装对象,但通常这不是一个常用的显式转换方法,因为直接使用操作原始类型的包装对象(如new Number(), new String(), new Boolean())更为明确。

let num = 123;
let objNum = Object(num); // objNum 是一个Number对象

6、toString() 和 valueOf() :

可以从对象中提取其基本类型值,这也是显式类型转换的一种方式,但通常是在对象上调用这些方法而不是使用转换函数。

let date = new Date();
let dateString = date.toString(); 
// dateString 是一个日期的字符串表示,类似:Sat Feb 18 2024 10:10:10 GMT+0800 (Your Time Zone)

请注意,这些转换并非总是能得到预期的结果,特别是在处理非标准格式的输入时,需要谨慎使用并结合实际情况判断。例如,parseInt 和 parseFloat 在处理不符合数字格式的字符串时会返回 NaN。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学员回访 | 天爷啊!我找到月薪16K的工作了!

终于轮到我说了!!!我!!!这一刻!!!我感觉全世界都没有我幸福!!!普通二本学历的我,竟然真的找到了一个16k的工作&#xff01…

面试:正确率能很好的评估分类算法吗

正确率(accuracy) 正确率是我们最常见的评价指标,accuracy (TPTN)/(PN),正确率是被分对的样本数在所有样本数中的占比,通常来说,正确率越高,分类器越好。 不同算法有不同特点,在不同…

上传包到npm

切换自己的npm源(需要切到npm源 我npm注册的账户) 切换为npm源:npm config set registry https://registry.npmjs.org 添加用户 npm adduser 查看是否成功 npm who am i 发包 npm publish 删除指定包版本 npm unpublish 【包名版本号】

springboot745简历系统

springboot745简历系统 获取源码——》公主号:计算机专业毕设大全

绝绝子!你的服务器赞助,我们的开源社区就能飞跃式升级,你绝对不想错过

在当今这个信息爆炸的时代,学习已经成为了我们生活中不可或缺的一部分。然而,随着互联网的高速发展,越来越多的技术知识被涌现出来,让人们在学习的道路上感到困惑和迷茫。为了解决这个问题,我们团队正在开发一个开源项…

尝试以语法对照表格形式学习新语言:c,rust

以语法对照表格形式学习新语言,以rust为例。 关于rust的个人看法: 能否替代c?部分场景可以,长远看并不会。如果c再扩一些关键字,类似cpp的吸星大法式扩充,rust并不具备优势。解决了c的内存管理问题&#x…

【JavaEE】_HTTP响应

目录 1. 首行 2. 报头header 3.空行 4. 正文body 1. 首行 响应首行:版本号状态码状态码描述; HTTP状态码描述了这次响应的结果(比如成功、失败,以及失败原因等); 1. HTTP状态码有: &#…

Vue框架与前端部署:构建现代化Web应用的利器

在当今数字化时代,Web应用的开发已成为企业业务发展的关键一环。前端开发作为Web应用的重要组成部分,扮演着至关重要的角色。Vue框架作为一种现代化的前端开发工具,以其简洁易用、高效灵活的特点备受开发者青睐。而前端部署则是将开发的前端代…

Spring中 Bean 的六种作用域官方说明

在 Spring 中有6种 Bean 作用域,分别为: 1、singleton(单例作用域) 2、prototype(原型作用域) 3、request(请求作用域) 4、session(会话作用域) 5、applicati…

如何在 Linux 系统中查看系统日志

Linux 系统提供了强大的日志功能,可以记录系统和应用程序的各种事件和错误信息。系统日志对于故障排除和性能监控非常重要。 图片 一、使用命令行工具查看系统日志 使用 journalctl 命令查看系统日志:journalctl 命令是 systemd 日志管理器的客户端工具,它可以查看 system…

软件测试知识总结

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、黑盒测试、白盒测试、灰盒测试 1.1 黑盒测试 黑盒测…

【c++ debug】记一次protobuf结构相关的coredump问题

文章目录 1. 问题现象2. 问题描述3. 问题分析4. 问题根因5. 问题修复6. 补充:类成员变量定义为引用类型 1. 问题现象 其中curr_lanes是一个目标上一帧的当前车道current_lanes_curr_lane是lane_id对应的LaneInfo信息现象:在lane_info->lane().success…

Stackoverflow(1)-根据RequestBody的内容来区分使用哪个资源

如果使用Spring,可以通过RequestBody将请求体的json转换为Java对象,但如果URI相同,而请求体的内容不同,应该怎么办?问题来源(stackoverflow):Spring RequestBody without using a pojo?稍微研究了一下&…

浅析Linux设备驱动:IO端口和IO内存

文章目录 概述IO端口和IO内存的区别 IO资源管理IO资源类型IO端口资源IO内存资源 IO资源分配 IO端口访问IO端口操作函数 IO内存访问IO内存操作函数 相关参考 概述 在计算机系统中,外部设备通常会提供一组寄存器或内存用于处理器配置和访问设备功能。这些寄存器或内存…

由斐波那契数列探究递推与递归

斐波那契数列定义: 斐波那契数列大家都非常熟悉。它的定义是: 对于给定的整数 x ,我们希望求出: f ( 1 ) f ( 2 ) … f ( x ) f(1)f(2)…f(x) f(1)f(2)…f(x) 的值。 有两种方法,分别是递推(迭代)与递归 具体解释如下图 备注…

JDBC核心技术

第1章 JDBC概述 第2章 获取数据库连接 第3章 使用PreparedStatement实现CRUD操作 第4章 操作BLOB类型字段 第5章 批量插入 第6章 数据库事务 第7章 DAO及相关实现类 第8章 数据库连接池 第9章 Apache-DBUtils实现CRUD操作图像 小部件

蜂蜜器实验-驱动代码测试

一. 简介 上一篇文章实现了蜂鸣器驱动代码,实现关闭蜂鸣器与打开功能。文章地址如下: 蜂鸣器驱动代码完善-CSDN博客 本文对所实现的蜂鸣器驱动代码进行测试。 二. 蜂鸣器驱动代码测试 1. 准备应用程序 这里应用程序还使用 前面实现所使用的Led应用…

学习数据接构和算法的第10天

题目讲解 尾插 #include <stdio.h> #include <stdlib.h> // 定义顺序表结构 #define MAX_SIZE 100 struct ArrayList {int array[MAX_SIZE];int size; // 当前元素个数 }; // 初始化顺序表 void init(struct ArrayList *list) {list->size 0; // 初始时元素个…

秒级到毫秒级的跨越—一次慢SQL优化历险

一次慢 SQL 优化过程 一、背景 对于公司内部的一个发票管理系统&#xff0c;财务人员经常需要对发票的开票交易进行查询&#xff0c;这里涉及到两张表&#xff1a;发票订单表和发票信息表&#xff0c;我们需要查询订单 ID、开票 APP、开票主体、订单类型、支付渠道、支付总额…

洛夫克拉夫特“克苏鲁神话”艺术风格探索(二)

三、多元的叙事风格 洛夫克拉夫特的克苏鲁神话作为当时独特的文学创造&#xff0c;有独特的叙事特征[8]。 一是侦探小说不稳定的叙事。最有名气的早期侦探小说是爱伦坡的《莫格街凶杀案》&#xff0c;并产生了“疑案”的经典设定&#xff0c;两次世界大战期间的侦探小说批评认…