JavaScript 中的隐式类型转换

news/2025/1/18 3:24:32/

一、什么情况会发生隐式类型转换?

1、加号(+)

+号比较特殊,既可以当做算数运算符做加法,又可以当做字符串连接符

① 算数运算符

除了 string 类型以外的原始数据类型进行加法运算时,非数字类型会转换为数字类型。

进行算术运算时,原始数据类型转为数字,使用 Number() 方法。

console.log(1 + 1) // 2
console.log(1 + undefined) // NaN
console.log(1 + null) // 1
console.log(null + undefined) //  NaN
console.log(true + false) // 1
console.log(true + 1) // 2

② 字符串连接符

当含有string类型和引用数据类型时,+号会作为字符串连接符使用,非string类型会转换为string类型。

引用数据类型:会调用自身 toString 方法,如果返回不是原始值,会继续调用自身 valueOf 方法;

非引用数据类型:v.isString() 如果是true,它将调用v.toString()。否则,它将值转换为字符串

console.log(1 + '2') // '12'
console.log('2' + '2') // '22'
console.log('1' + true) // '1true'
console.log('1' + false) // '1false'
console.log('1' + undefined) // '1undefined'
console.log('1' + null) // '1null'
console.log('1' + NaN) // '1NaN'
console.log('2' + []) // '2'
console.log(2 + [1, 2]) // '21,2'
console.log(2 + { a: 1 }) // '2[object Object]'
console.log([] + {}) // '[object Object]'
console.log({} + []) // '[object Object]'
console.log(3 + {}) // '3[object Object]'
console.log({} + 3) // '[object Object]3'
console.log(true + []) // 'true'
console.log(true + {}) // 'true[object Object]'
console.log(undefined + {}) // 'undefined[object Object]'

 

2、除加号以外的算数运算符(- * /)

非数字类型会转换为数字类型;

原始数据类型:调用 Number() 方法进行转换;

引用数据类型:调用自身 valueOf 方法进行转换,如果转换后不是原始值,则会调用 toString 方法进行转换,如果转换后不是数字,则会调用 Number() 进行转换,如果转换后不是数字则会返回NaN

console.log(10 - 1) // 9
console.log(10 - '1') // 9
console.log(10 - null) // 10
console.log(10 - undefined) // NaN
console.log(10 - NaN) // NaN
console.log(10 - true) // 9
console.log(10 - false) // 10
console.log(10 - {}) // NaN
console.log(10 - {name: '草莓'}) // NaN
console.log(10 - [1,2]) // NaN

 

3、逻辑运算符(&&   ||  !!!) 

非布尔类型会转换为布尔类型,引用数据类型转换为布尔值后总会是 true

①  !

!a,如果a为布尔值,则直接取反;如果a为非布尔值,则会转换为布尔值然后取反

② &&

a && b,如果a为true,则会返回b;如果a为false,则会返回a

③ ||

a || b,如果a为true,则会返回a;如果a为false,则会返回b

④ !! 

 !!a,会直接将非布尔值转换为布尔类型的值

console.log(![]) // false
console.log(!{}) // false
console.log(!1) // false
console.log(!0) // true
console.log(!undefined) // true
console.log(!null) // true
console.log(!'') // true
console.log(!NaN) // trueconsole.log(1 && 2) // 2
console.log([] && 2) // 2
console.log(2 && {}) // {}console.log(2 || {}) // 2 
console.log(false || {}) // {}
console.log('' || {}) // {}console.log(!!{}) // true
console.log(!![]) // true
console.log(!!0) // false
console.log(!!1) // true
console.log(!!'') // false

4、比较运算符(==  >  < 等) 

null与undefined进行==比较时,不会进行转换,总返回true

引用数据类型,会先转换为string(先调用valueOf,后调用toString),再转换为number

如果==左右都是引用数据类型,会进行地址比较;

NaN是唯一一个与自身不相等的值;

console.log(undefined == null) // true
console.log(undefined == '') // false
console.log(null == null) // true
console.log('' == null) // false
console.log(undefined == undefined) // true
console.log('' == '') // true
console.log(NaN == NaN) // false
console.log('' == NaN) // false
console.log(1 == '1') // true
console.log(0 == []) // true
console.log('1,2' == [1,2]) // true
console.log([] == []) // false
console.log([1, 2] == [1, 2]) // false
console.log({} == []) // false
console.log({} == {}) // false

 

二、类型转换 

1、原始数据类型转为number: 

2、原始数据类型转为string:

 3、引用类型转为string:

4、所有类型转换为boolean:

 

 

 


http://www.ppmy.cn/news/1006611.html

相关文章

mmdet3.x——基础小用法trick

通过config修改训练Port 参考文档&#xff1a;修改port文档 # 只需要在config中的env_cfg里的dist_cfg中指定port即可 env_cfg dict(cudnn_benchmarkFalse,mp_cfgdict(mp_start_methodfork, opencv_num_threads0),dist_cfgdict(backendnccl, port29510), # 可自定义port )

2.4G芯片G350开发的遥控玩具解决方案

玩具从早期的简单功能&#xff0c;到现如今各种各样的智能操作&#xff0c;发展的速度也是飞速的。随着玩具市场的逐步完善与推进&#xff0c;中国的智能玩具市场也出现了很多远程遥控玩具。遥控玩具也是从最初的有线到现在的无线&#xff0c;从地上跑的到天上飞的&#xff0c;…

plsql连接oracle出现TTC错误

这个错误莫名其妙&#xff0c;搜不到直接关联的解决方案。用了下面解决乱码的方式倒是解决了。 ORA-03137: TTC protocol internal error : [%s] [%s] [%s] [%s] [%s] [%s] [%s] [%s] 按照如下链接解决&#xff1a; PL/SQL Developer中文乱码解决方案_Bug君坤坤的博客-CSDN博…

chrome插件开发实例02-使用content_scripts对用户浏览页面操作

目录 引言 chrome插件 插件演示 源代码 manifest.json content_scripts.js css设置(放在css文件夹下)<

caffe转onnx

pip install -i Simple Index 源码需要依赖caffe的python接口 代码路径&#xff1a;GitHub - inisis/caffe2onnx: caffe model to onnx 注意事项&#xff1a;caffe的relu和pool层需要修改名字&#xff0c;否则会报错&#xff0c;如下&#xff1a; onnx.onnx_cpp2py_export.…

第28天-Kubernetes架构,集群部署,Ingress,项目部署,Dashboard

1.K8S集群部署 1.1.k8s快速入门 1.1.1.简介 Kubernetes简称k8s&#xff0c;是用于自动部署&#xff0c;扩展和管理容器化应用程序的开源系统。 中文官网&#xff1a;https://kubernetes.io/zh/中文社区&#xff1a;https://www.kubernetes.org.cn/官方文档&#xff1a;https…

涉及IMU的专业术语

文章目录 零偏维纳过程/布朗运动随机游走航迹推算 零偏 IMU&#xff08;惯性测量单元&#xff09;是一种用于测量物体在空间中的加速度和角速度的装置。它通常由加速度计和陀螺仪组成&#xff0c;这些传感器可以帮助确定物体的运动状态和方向。 在IMU中&#xff0c;“零偏”&…

【使用基于二阶积分器的结构生成正交信号】基频共振而无延迟地滤波信号的正交信号生成模块,为单相系统创建 α/β 信号(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…