【JavaScript 漫游】【007】数据类型转换

news2024/11/27 22:22:14

山峰_晚霞
文章简介

本文为【JavaScript 漫游】专栏的第 007 篇文章,对 JS 数据类型转化语法进行了简记。

数据类型的转换指的是将 JS 的某一数据类型的值转换为 JS 的某一原始数据类型的值,也就是 numberstringboolean

  1. Number 方法强制转换为 number 类型
  2. String 方法强制转换为 string 类型
  3. Boolean 方法强制转换为 boolean 类型
  4. 自动转换为数值的场景
  5. 自动转换为字符串的场景
  6. 自动转换为布尔值的场景

Number 方法

Number(123);  // 123, 数值转换后还是原来的值
Number('123');  // 123,字符串如果可以解析为数值,转换为相应的数值
Number('123a');  // NaN,如果不可以解析为数值,就返回 NaN
Number('');  // 0,空字符串转为 0
Number(true);  // 1,布尔值 true 转为 1
Number(false);  // 0,布尔值 false 转为 0
Number(undefined);  // NaN
Number(null);  // 0
Number([5]);  // 5
Number({a: 1});  // NaN,对象除了包含单个数值的数组会转为数值,其他都是 NaN

Number 方法将字符串转为数值,要比 parseInt 方法要严格得多。基本上,只要有一个字符无法转为数值,整个字符串就会被转为 NaN

parseInt('123a');  // 123
Number('123a');  // NaN

parseInt 是逐个字符解析,Number 是整体解析。

此外,它们的一个共同点就是都会自动过滤字符串前导或后缀的空格。

parseInt('\t\v\r12.34\n') // 12
Number('\t\v\r12.34\n') // 12.34

值得注意的是,Number 方法的参数是对象时,将返回 NaN,除非是包含单个数值的数组。背后的原因是,Number 背后的转换规则比较复杂。

第一步,调用对象自身的 valueOf 方法。如果返回的是原始类型的值,就对该值使用 Number 方法,不再进行后续步骤。

第二步,改为调用对象自身的 toString 方法。如果返回的是原始类型的值,就对该值使用 Number 方法,不再进行后续步骤。

第三步,如果toString 方法返回的是对象,就报错。

对象的 valueOf 方法和 toString 方法,笔者会在后续总结 Object 对象的静态方法和实例方法时进行说明。这里先暂时记录着其中的原理。

String 方法

String(123);  // '123'
String('123');  // '123'
String('true');  // 'true'
String(undefined);  // 'undefined'
String(null);  // 'null'
String([1, 2, 3]);  // '[1, 2, 3]'
String({a: 1});  // '[object Object]'

String 方法的参数如果是对象,返回一个类型字符串;如果是数组,就返回该数组的字符串形式。

背后的转换原理,与 Number 方法基本相同,只是调换了顺序。

第一步,调用对象自身的 toString 方法。如果返回的是原始类型的值,就对该值使用 String 方法,不再进行后续步骤。

第二步,改为调用对象自身的 valueOf 方法。如果返回的是原始类型的值,就对该值使用 String 方法,不再进行后续步骤。

第三步,如果valueOf 方法返回的是对象,就报错。

Boolean 方法

Boolean(1);  // true
Boolean(0);  // false
Boolean('hello, world');  // true
Boolean('');  // false
Boolean(undefined);  // false
Boolean(null);  // false
Boolean(true);  // true
Boolean(NaN);  // false
Boolean({});  // true
Boolean([]);  // true
Boolean(new Boolean(false));  // true

要注意的是,所有对象(包括空对象)的转换结果都是 true,甚至连 false 对应的布尔对象 new Boolean(false) 也是 true

自动转换为数值的场景

JS 遇到预期为数值的地方,就会将参数值自动转换为数值。系统内部会自动调用 Number 方法。

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

'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

自动转换为字符串的场景

JS 遇到预期为字符串的地方,就会将参数值自动转换为字符串。具体规则是,先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串。

自动转换为字符串的场景,主要发生在字符串的加法运算符的时候。

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

自动转换为布尔值的场景

JS 遇到预期为布尔值的地方(比如 if 语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用 Boolean 方法。

自动转换为布尔值的场景主要是 if 语句、逻辑运算符和三元运算符。

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

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

相关文章

Python||五城P.M.2.5数据分析与可视化_使用复式柱状图分析各个城市的P.M.2.5月度差异情况(中)

目录 4.上海市空气质量月度差异 5.沈阳市空气质量月度差异 五城P.M.2.5数据分析与可视化_使用复式柱状图分析各个城市的P.M.2.5月度差异情况 4.上海市空气质量月度差异 import numpy as np import pandas as pd import matplotlib.pyplot as plt#读入文件 sh pd.read_csv(./S…

arping交叉编译

arping命令依赖libpcap和libnet,需要先交叉编译这两个库。 1.交叉编译libpcap 下载libpcap源文件,从github上克隆: git clone https://github.com/the-tcpdump-group/libpcap.git source交叉编译环境 # environment-setup是本机的交叉编译环境, 里面…

12. onnx转为rknn测试时有很多重叠框的修改(python)

我们下载rknn-toolkit2-master后并进行前面的处理后,进入到rknn-toolkit2-master\examples\onnx\yolov5文件夹,里面有个test.py文件,打开该文件,其代码如下: # -*- coding: utf-8 -*- # coding:utf-8import os import…

解决问题(Tensorflow框架):ImportError: cannot import name ‘merge‘ from ‘keras.layers‘

看了一圈解决方案,没有找到跟我这个相关的 这就是版本兼容性问题 说句最简单的,针对我这个问题 直接把merge删除点就完事了,因为新版的tensorflow框架这个里面不包含merge,所以直接删掉问题就解决了

SD-WAN的安全性体现在哪里?

SD-WAN技术以其高度灵活、网络自动配置和低成本等优势,将多个物理WAN链接整合为一个逻辑网络,推动网络从“连通驱动”向“服务驱动”导向的转变。同时,企业在追求高效网络时,SD-WAN的安全性也成为一个重要的考量因素。 SD-WAN采用…

快速掌握西门子S7-1200 PLC的PID控制工艺

模拟量闭环控制系统-PID控制的特点: 不需要被控对象的数学模型,结构简单容易实现,使用方便有较强的灵活性和适应性。 用调试窗口整定PID控制器-调试窗口的功能: 1、使用“首次启动自调节”功能优化控制器 2、使用“运行中自调节…

windows 搭建nginx http服务

下载 下面链接直接点击下载,下载的就是包含rtmp服务器相关功能的,只不过需要配置下 Index of /download/ (ecsds.eu) nginx 1.7.11.3 Gryphon.zip直接点击额下面的连接即可下载 http://nginx-win.ecsds.eu/download/nginx%201.7.11.3%20Gryphon.zip …

问题:下列哪些属于历史文化资源的特征( ). #学习方法#学习方法

问题:下列哪些属于历史文化资源的特征( ). A、稀缺性 B、脆弱性 C、可再生性 D、多样性 参考答案如图所示

深度学习(7)---Diffusion Model概念讲解

文章目录 一、基本概括1.1 概念讲解1.2 Denoise模块 二、Stable Diffusion2.1 概念讲解2.2 FID2.3 CLIP 一、基本概括 1.1 概念讲解 1. Diffusion Model是一种生成模型,通过连续添加高斯噪声来破坏训练数据,然后学习反转的去噪过程来恢复数据。它分为正…

算法学习——华为机考题库10(HJ64 - HJ67)

算法学习——华为机考题库10(HJ64 - HJ70) HJ64 MP3光标位置 描述 MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲&a…

代码随想录算法训练营第三十五天|343. 整数拆分 , 96.不同的二叉搜索树

343. 整数拆分 代码随想录 视频讲解:动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分_哔哩哔哩_bilibili class Solution {public int integerBreak(int n) {// 1.确定dp数组(dp table)以及下…

【git】本地项目推送到github、合并分支的使用

1. github上创建仓库信息 点击个人头像,选择【你的仓库】 点击【新增】 填写仓库信息 2. 本地项目执行的操作 1.生成本地的git管理 (会生成一个.git的文件夹) git init 2.正常提交到暂存区,并填写提交消息 git add . git commit -m "init…

golang并发安全-sync.Once

什么是sync.Once sync.Once 是 Go 语言中的一种同步原语,用于确保某个操作或函数在并发环境下只被执行一次。它只有一个导出的方法,即 Do,该方法接收一个函数参数。在 Do 方法被调用后,该函数将被执行,而且只会执行一…

Python算法题集_搜索二维矩阵II

Python算法题集_搜索二维矩阵II 题41:搜索二维矩阵II1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【双层循环】2) 改进版一【行尾检测】3) 改进版二【对角线划分】 4. 最优算法 本文为Python算法题集之一的代码示例 题41&#xf…

Oracle 面试题 | 12.精选Oracle高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

国辰智企APS自动化排产平台:实现生产计划与其他系统无缝协同

在当今竞争激烈的制造环境中,有效的生产计划和排程对于企业的成功至关重要。APS生产计划排程平台作为一种先进的工具,正越来越受到企业的关注和应用。那么,APS生产计划排程平台有哪些类型呢?本文将为您详细介绍。 1.基于规则的APS…

Java学习-内部类

内部类概述 1.成员内部类 注意: 2.静态内部类 3.局部内部类(看看就行) 4.匿名内部类 应用场景:通常作为一个参数传给方法 Eg.小猫和小狗都参加游泳比赛

Open CASCADE学习|分割曲线

1、通过参数进行分割 分别获得曲线的 FirstParameter 和 LastParameter ,然后对参数进行分割,获得n个ui,并对每个ui调用D0(获得这个点的坐标值)或D1(获得这个点的坐标值和切向量)。这个方法的优…

【MySQL进阶】事务原理

文章目录 事务机制基本介绍事务管理基本操作提交方式事务 ID 隔离级别四种级别加锁分析 原子特性实现方式实现原理undo log 隔离特性实现方式MVCC实现原理隐藏字段undo logRead View RC RR 持久特性实现方式redo log 一致特性 面试题MySQL的ACID特性分别是怎么实现的&#xff1…

AES算法:数据传输的安全保障

在当今数字化时代,数据安全成为了一个非常重要的问题。随着互联网的普及和信息技术的发展,我们需要一种可靠的加密算法来保护我们的敏感数据。Advanced Encryption Standard(AES)算法应运而生。本文将介绍AES算法的优缺点、解决了…