JavaScript 中的类型转换机制(详细讲解)

news2024/11/14 18:00:18

文章目录

    • 一、概述
    • 二、显示转换
      • Number()
      • parseInt()
      • String()
      • Boolean()
    • 三、隐式转换
      • 自动转换为布尔值
      • 自动转换成字符串
      • 自动转换成数值

一、概述

前面我们讲到,JS中有六种简单数据类型:undefinednullbooleanstringnumbersymbol,以及引用类型:object

但是我们在声明的时候只有一种数据类型,只有到运行期间才会确定当前类型

上面代码中,x的值在编译阶段是无法获取的,只有等到程序运行时才能知道

虽然变量的数据类型是不确定的,但是各种运算符对数据类型是有要求的,如果运算子的类型与预期不符合,就会触发类型转换机制

常见的类型转换有:

  • 强制转换(显示转换)
  • 自动转换(隐式转换)

二、显示转换

显示转换,即我们很清楚可以看到这里发生了类型的转变,常见的方法有:

  • Number()
  • parseInt()
  • String()
  • Boolean()

Number()

将任意类型的值转化为数值

先给出类型转换规则:

实践一下:

Number(324) // 324

// 字符串:如果可以被解析为数值,则转换为相应的数值
Number('324') // 324

// 字符串:如果不可以被解析为数值,返回 NaN
Number('324abc') // NaN

// 空字符串转为0
Number('') // 0

// 布尔值:true 转成 1,false 转成 0
Number(true) // 1
Number(false) // 0

// undefined:转成 NaN
Number(undefined) // NaN

// null:转成0
Number(null) // 0

// 对象:通常转换成NaN(除了只包含单个数值的数组)
Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5

从上面可以看到,Number转换的时候是很严格的,只要有一个字符无法转成数值,整个字符串就会被转为NaN

parseInt()

parseInt相比Number,就没那么严格了,parseInt函数逐个解析字符,遇到不能转换的字符就停下来

String()

可以将任意类型的值转化成字符串

给出转换规则图:

实践一下:

// 数值:转为相应的字符串
String(1) // "1"

//字符串:转换后还是原来的值
String("a") // "a"

//布尔值:true转为字符串"true",false转为字符串"false"
String(true) // "true"

//undefined:转为字符串"undefined"
String(undefined) // "undefined"

//null:转为字符串"null"
String(null) // "null"

//对象
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"

Boolean()

可以将任意类型的值转为布尔值,转换规则如下:

实践一下:

Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false
Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) // true

三、隐式转换

在隐式转换中,我们可能最大的疑惑是 :何时发生隐式转换?

我们这里可以归纳为两种情况发生隐式转换的场景:

  • 比较运算(==!=><)、ifwhile需要布尔值地方
  • 算术运算(+-*/%

除了上面的场景,还要求运算符两边的操作数不是同一类型

自动转换为布尔值

在需要布尔值的地方,就会将非布尔值的参数自动转为布尔值,系统内部会调用Boolean函数

可以得出个小结:

  • undefined
  • null
  • false
  • +0
  • -0
  • NaN
  • “”

除了上面几种会被转化成false,其他都换被转化成true

自动转换成字符串

遇到预期为字符串的地方,就会将非字符串的值自动转为字符串

具体规则是:先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串

常发生在+运算中,一旦存在字符串,则会进行字符串拼接操作

'5' + 1 // '51'
'5' + true // "5true"
'5' + false // "5false"
'5' + {} // "5[object Object]"
'5' + [] // "5"
'5' + function (){} // "5function (){}"
'5' + undefined // "5undefined"
'5' + null // "5null"

自动转换成数值

除了+有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值

'5' - '2' // 3
'5' * '2' // 10
true - 1  // 0
false - 1 // -1
'1' - 1   // 0
'5' * []    // 0
false / '5' // 0
'abc' - 1   // NaN
null + 1 // 1
undefined + 1 // NaN

null转为数值时,值为0undefined转为数值时,值为NaN

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

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

相关文章

【BUUCTF Misc】通关1.0

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

网工学习 DHCP配置-接口模式

网工学习 DHCP配置-接口模式 学习DHCP总是看到&#xff0c;接口模式、全局模式、中继模式。理解起来也不困难&#xff0c;但是自己动手操作起来全是问号。跟着老师视频配置啥问题没有&#xff0c;自己组建网络环境配置就是不通&#xff0c;悲催。今天总结一下我学习接口模式的…

源码全开源可二次开发+求职招聘找工作小程序源码系统 带完整的搭建教程

随着移动互联网的普及和深入&#xff0c;小程序作为一种轻量级的应用形态&#xff0c;以其无需下载安装、即用即走的特点&#xff0c;迅速成为了连接线上线下的重要桥梁。特别是在求职招聘领域&#xff0c;小程序以其便捷性和高效性&#xff0c;成为了求职者与招聘方之间的理想…

wordpress 开源主题

海外就医wordpress主题 出国看病、海外就医是越来越多中产家庭的选择&#xff0c;此wordpress主题适合做相关业务的公司官网。 https://www.jianzhanpress.com/?p5220 防护wordpress外贸主题 个人防护器具wordpress外贸主题&#xff0c;适合做劳动保护的外贸公司使用。 ht…

【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0

目录 一、 Kubernetes 的概述 二、服务器配置 2.1 服务器部署规划 2.2服务器初始化配置 三、安装Docker/kubeadm/kubelet【所有节点】 3.1 安装Docker 3.2 添加阿里云YUM软件源 3.3 安装kubeadm&#xff0c;kubelet和kubectl 四、部署Kubernetes Master 五、部署Kube…

Javascript如何获取指定网页中的内容?

前言: 这两天有一个需求&#xff0c;即利用JavaScript语言来检索网页的文本内容。当然&#xff0c;实现这一目标的途径并非单一&#xff0c;除了我即将分享的特定技巧之外&#xff0c;还有另一种方法值得一提&#xff1a;通过Ajax的GET请求。然而&#xff0c;相比之下&#xff…

工作流Activiti7

代码逐步解析&#xff1a; 在使用 Camunda BPM 框架时获取默认的流程引擎实例 在 Camunda BPM 中&#xff0c;流程引擎是用于执行业务流程的核心组件&#xff0c;它负责管理流程定义、流程实例、任务等。通过这段代码&#xff0c;可以获取到默认的流程引擎实例&#xff0c;然后…

[C#]winform部署yolov9的onnx模型

C# WinForms 部署 YOLOv9 ONNX 模型简介 在当今的计算机视觉领域&#xff0c;目标检测是不可或缺的一项技术。YOLO&#xff08;You Only Look Once&#xff09;系列模型以其高效和准确的特点受到了广泛关注。随着YOLOv9的发布&#xff0c;其性能进一步提升&#xff0c;为实际应…

香橙派企业信用问题-劝一个是一个,别买!!!

1. 背景 香橙派推广旗下AI PRO 开发板&#xff0c;在B站做直播&#xff0c;一场直播两个直播间&#xff0c;分别抽取一名观众&#xff0c;宣传是场场送AI PRO开发板&#xff01;&#xff01;&#xff01; 2. 收到奖品与宣传不符合 3.咨询群主&#xff1a;态度很傲慢&#xff0c…

图像处理基础——频域、时域

下图是低通滤波器的频率响应曲线。 低通滤波器频响曲线 横轴是频率(Hz)&#xff0c;纵轴是声音大小(dB)。&#xff08;请忽略图中的频率刻度&#xff0c;没有对应人声的频率范围&#xff09; 所谓的低音效果&#xff0c;其实就是对人声中的低音部分保留或增强&#xff0c;对应…

2.并发编程

文章迁移自语雀。原文地址&#xff1a;https://www.yuque.com/changhe-xqeca/zn1cvu/dvunld 昨晚上感觉程程是个温柔的姑娘 1.同步的实现: 是利用锁的机制来实现同步的。 锁机制有如下两种特性&#xff1a; 互斥性&#xff1a;即在同一时间只允许一个线程持有某个对象锁&a…

云端技术驾驭DAY15——ClusterIP服务、Ingress服务、Dashboard插件、k8s角色的认证与授权

往期回顾&#xff1a; 云端技术驾驭DAY01——云计算底层技术奥秘、云服务器磁盘技术、虚拟化管理、公有云概述 云端技术驾驭DAY02——华为云管理、云主机管理、跳板机配置、制作私有镜像模板 云端技术驾驭DAY03——云主机网站部署、web集群部署、Elasticsearch安装 云端技术驾驭…

C++用临时对象构造新对象

C用临时对象构造新对象 //用临时对象构造同类型的新对象&#xff0c;该临时对象不产生&#xff1b; // 直接用生成临时对象的方法构造新对象&#xff0c;这是编译器对代码的优化&#xff0c;效率更高 #include<iostream> using namespace std; class MyClass { public:…

软件测试--性能测试工具JMeter

软件测试--性能测试工具JMeter 主流性能测试工具1.主流性能测试工具Loadrunner和Jmeter对比 —— 相同点2.主流性能测试工具Loadrunner和Jmeter对比 —— 不同点JMeter基本使用JMeter环境搭建1.安装JDK:2.安装Jmeter:3.注意点:JMeter功能概要1. JMeter文件目录介绍1.1 bin目…

win11环境下使用hane WIN NFS Server搭建nfs服务

如题&#xff0c;服务端使用hane win nfs server&#xff0c;客户端也是使用wins系统。 S1&#xff0c;安装nfs服务器端&#xff0c;wins系列除了server系列可以使用nfs服务端&#xff0c;其余必须使用额外的组件来实现NFS文件系统的功能。 Networking Software for Windows …

后端开发技术面试指南

工作10多年&#xff0c;每年都会帮组里面试一些新同学校招社招的都有&#xff0c;下面我就从一个面试官的视角来给大家拆解一下如何淡然应对后端开发技术面试。 1.一面多为电话面试 (1)问七问八 ①简历要注重内容&#xff0c;形式上不丑没有错别字即可。之前收到过一个工作5…

机器学习 | 四大常用机器学习Python库介绍

今天这篇我们介绍下Python中常用的机器学习库(机器学习、深度学习啥的&#xff0c;小编还是建议使用Python进行建模编写哈)&#xff0c;也算是本公号机器学习的第一篇推文&#xff0c;主要内容如下&#xff1a; 机器学习常用四大Python库 关于机器学习的我想说的话 所有完整代…

Linux系统Docker部署RStudio Server

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE&#xff0c;并通过 Web 浏览器进行访问…

公网IP怎么获取?

公网IP是网络中设备的唯一标识符&#xff0c;用于在Internet上进行通信和定位。对于普通用户来说&#xff0c;了解如何获取自己的公网IP是很有必要的&#xff0c;本文将介绍几种获取公网IP的方法。 方法一&#xff1a;通过路由器查询 大多数家庭和办公室使用的路由器都会有一个…

Java集合-ArraysLIst集合

集合是“由若干个确定的元素锁构成的整体”&#xff0c;在程序中&#xff0c;一般代表保存若干个元素(数据)的某种容器类。在Java中&#xff0c;如果一个Java对象可以在内部持有(保存)若干其他Java对象&#xff0c;并对外提供访问接口&#xff0c;我们把这种Java对象的容器称为…