JavaScript类型转换

一些需要注意的数据类型:

  • NaN的数据类型是number
  • Array、Date、null的数据类型是object
  • 未定义变量的数据类型是undefined

自动转换类型:尝试操作一个 “错误” 的数据类型时,会自动转换为 “正确” 的数据类型。

 5 + null    // 返回 5         null 转换为 0     
 "5" + null  // 返回"5null"    null 转换为 "null"
 "5" + 1     // 返回 "51"      1 转换为 "1"  
 "5" - 1     // 返回 4         "5" 转换为 5

==运算符的隐式类型转换规则

1.类型转换:两个操作数的类型不同,js会尝试转换成相同的类型。

2.原始类型比较:两个操作数的类型都是原始类型(如数组、字符串、布尔值),它们会被转换成相同的类型,再进行比较。

3.nullundefined比较:被视为相等。

4.字符串和数字比较:js会将字符串转换成数字,再进行比较。如果字符串不能转换成有效的数字,则结果为false

5.布尔值比较:一个是布尔值,一个非布尔值,则布尔值会被转换成数字,再进行比较。true为1,false为0。

6.对象和原始类型比较:对象通过ToPrimitive转换成原始类型,再进行比较。通常涉及到对象的valueOf()toString()方法。

 ToPrimitive(obj, Number) ==> Number({})
 //1.如果 obj 是基本类型,直接返回
 //2.否则,调用 valueOf 方法,如果得到原始值,则返回
 //3.否则,调用 toString 方法,如果得到原始值,则返回
 //4.否则,报错

7.NaN比较:NaN与任何值比较都返回false,包括NaN自己。

在写代码时,最好使用===来避免隐式类型转换并确保类型和值都相等。

[] == ![]返回true

关系转换图如下:

image.png

[]![]都是对象,!的优先级大于==,要先进行非运算。

!会进行两步操作:

  • 1.对!后面的操作数转换成布尔值
  • 2.将这个布尔值取反

则将[]转换成布尔值,根据官方文档可知,任何对象转换成布尔值都是true,所以![]false

则原式变为[] == false,一个是对象一个是布尔值,则都会转换成数字进行比较。[]经过ToPrimitive会被转换成字符串""。再将等号两边的字符串""和布尔值false转换成数字 0 ,得到 0 == 0 ,打印得到 true

 //执行过程
 [] == ![]
 [] == !true // 将空数组这个对象类型转换成布尔值
 [] == false // ! 运算符对 true 进行取反
 '' == false // 对 [] 进行 ToPrimitive 操作,返回一个空对象 
 0 == 0 // 将等号两边都转换成数字类型
字符串转换成数字

js在将字符串转换成数字时,它会查看字符串的内容。如果表示一个有效的数字则会转换成数字,不是则转换成NaN

Q:\t == 0是为什么?

  • 有些特殊含义的字符会被转换成数字0,\t \n \r在进行字符串转换数字时都是0。
  • 还有种说法是:字符串在toNumber()时会首先去除空格,再判断该数字是否为非数字。如果NaN,则结果为``NaN;如果字符串为空则结果为0。

可以多看看这张图:

image.png

下图是使用不同的值转换为数字,字符串,布尔值:

image.png

image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百度测试经理,对自动化测试初学者的一些忠告

前言 相信很多的测试人员都有这样的顾虑,初学自动化测试应该怎么去做,那么现在我就把我在百度测试岗学到的经验分享给大家,希望对你们有帮助。 为了大家在学习的道路上更加轻松,我还给大家整理了一套Python自动化测试学习资料以…

Vue全家桶:vue2+vue3全部搞懂:第五篇,Vue的watch监视器

前提,建议先学会前端几大基础:HTML、CSS、JS、Ajax,不然不好懂 这一专栏知识将一次性将vue、vue2、vue3全部讲明白 一、何为watch监视器 其实我个人理解,就跟原本的表单的input事件一样,实时监视事件发生并同步更新数…

RuoYi-Vue-Plus功能分析-jackson配置

文章目录 前言一、配置文件二、配置类三、注解四、json工具类1. 工具内容2. 使用工具 前言 前端在给我发送请求的时候一般包含三个部分url,header,body。那么就会涉及我们后端如何接收这些请求参数并且我们处理完毕参数后前端又如何接收参数 通过url传…

【python】json转成成yaml中文编码异常显示成:\u5317\u4EAC\u8DEF123\u53F7

姊妹篇:【python】json转成成yaml json数据 {"name": "张三","age": 30,"isMarried": false,"children": [{"name": "小王","age": 5},{"name": "小李",&qu…

装饰器模式 详解 设计模式

装饰器模式 它允许你在不改变对象结构的情况下,动态地将新功能附加到对象上。 结构: 抽象组件(Component):定义了原始对象和装饰器对象的公共接口或抽象类,可以是具体组件类的父类或接口。具体组件&…

算法--动态规划(线性DP、区间DP)

这里写目录标题 tip数组下标从0开始还是从1开始 线性DP数学三角形介绍算法思想例题代码 最长上升子序列介绍算法思想例题代码 最长公共子序列介绍算法思想例题代码 编辑距离介绍例题代码 区间DP问题石子合并介绍算法思想例题代码 tip 数组下标从0开始还是从1开始 如果代码中涉…

Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版

Topaz Video AI是一款革命性的视频智能处理软件,它利用先进的机器学习和人工智能技术,为视频创作者提供了前所未有的视频增强和修复功能。无论您是专业视频编辑师、摄影师,还是热爱视频创作的爱好者,Topaz Video AI都能帮助您轻松…

返回JSON对象

在目前的Java项目中,我们最经常使用的便是JSON,不是传递JSON对象,就是返回JSON对象,甚至还把多个参数封装成JSON对象来进行传递,以便简化代码等! 但是,该如何操作代码才能正确的返回一个或者多…

excel导出标准化

虽然标题叫标准化,只不过是我自己的习惯,当一件事情变得流程标准化之后,开发程序就会飞快,开发评估工作总是 搞个1~2天,实则前端后端一起开发,1个小时就可以搞定。 1 前端 const exportXls async () >…

每日一题——LeetCode1556.千位分隔符

方法一 个人方法: 把n转为字符串,逆序遍历n,把n的每个元素加入res,每三次加入.,最后将res翻转再转为字符串即为符合题目要求的结果 var thousandSeparator function(n) {nlet res[],lenn.length-1for(let ilen;i>…

tomcat 搭建博客 及破解数据库密码

一 tomcat 搭建博客 (一)博客安装包 1, 把博客war包 放到 webapps 文件夹下 2,会自动解压 3,做个软连接 方便后续操作 可以注意到 因为war包 是又tomcat 自己解压的 所以属主数组还是 tomcat &#xff08…

大模型生成,Open API调用

大模型是怎么生成结果的 通俗原理 其实,它只是根据上文,猜下一个词(的概率)…… OpenAI 的接口名就叫【completion】,也证明了其只会【生成】的本质。 下面用程序演示【生成下一个字】。你可以自己修改 prompt 试试…

LaMa Image Inpainting 图像修复 Onnx Demo

目录 介绍 效果 模型信息 项目 代码 下载 LaMa Image Inpainting 图像修复 Onnx Demo 介绍 gihub地址:https://github.com/advimman/lama 🦙 LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WAC…

电脑休眠之后唤不醒

现象:午休时间电脑休眠了,醒来之后发现在密码输入界面,但鼠标键盘没反应。按重启键或电源机重新开机,结果开不了机。 原因:1、内存条脏了,导致内存条读取失败 2、休眠的时候硬盘休眠了,导致按…

7、Redis-事务、持久化、内存淘汰机制和过期key处理

目录 一、事务 二、持久化 三、内存淘汰机制 四、过期key处理 一、事务 Redis的事务本质上就是一个批量执行命令的操作。分为三个步骤: 开始事务:multi命令入队:正常输入命令即可执行事务(依次执行命令)&#xf…

linux_day04

大纲:命令,vim,gcc,编译工具,生成代码,调试,库makefile,系统编程 文件系统:文件属性,文件内容,万物皆文件(不在内存中的是文件&#…

为什么说?上位机开发有广泛的前景

上位机开发展现了广泛的前景,主要有以下几个方面的原因: 广泛应用的C#语言: C#在软件开发领域得到了广泛应用,拥有丰富的库、工具和社区支持,使得学习和使用C#进行上位机开发更加便捷。与Windows密切相关: …

LeetCode -- 79.单词搜索

1. 问题描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水…

用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告

本篇文章将介绍如何使用开源的测试报告生成框架 Allure 生成规范、格式统一、美观的测试报告。 通过这篇文章的介绍,你将能够: 将 Allure 与 Pytest 测试框架相结合;如何定制化测试报告内容执行测试之后,生成 Allure 格式的测试报…

10.广域网技术

1. PPP实验点这里(拓扑代码) 2. PPPoE配置实验点这里(拓扑代码) 目录 一、广域网二、PPP协议三、PPP链路建立过程1-LCP(链路协商)四、PPP链路建立过程2-PAP/CHAP(认证协商,可选&…