JS不同运算符下的隐式类型转换

news2025/1/15 23:19:34

目录

运算符

逻辑运算符(&&、||、!)和 条件表达式(if、三元表达式)

逻辑运算符

条件表达式

算数运算符(*、/、- %、+)和 关系运算符(>、<、==、!=)

算数运算符

关系运算符


js是动态类型语言也称弱类型,在编写代码时,即在做计算的值类型不一样会做隐式类型转换。

console.log(1 + '2')  //  '12'
console.log('1' == true)  // true
console.log('1' == 1)  // true
console.log(true && 2) // 2
console.log(undefined == null)  // true
console.log('3' * 2)  // 6
console.log([1] + 1)  // '11'

运算符

逻辑运算符(&&、||、!)和 条件表达式(if、三元表达式)

逻辑运算符和条件表达式会将值隐式转换成Boolean

转Boolean

  • Boolean(1)  // true
  • Boolean('1')  // true
  • Boolean(true)  // true
  • Boolean(null)  // false
  • Boolean(undefined)  // false
  • Boolean([])  // true
  • Boolean({})  // true
  • Boolean(NaN)  // false
逻辑运算符
console.log(1 && 2) // 隐式转换 Boolean(1) && Boolean(2) 
//如果都为true则返回最后为true的值,如果有一个false则返回false, 输出2

console.log(1 || false) // Boolean(1) && false 
//返回第一个隐式转换为true的值, 输出1

console.log(!3) // !Boolean(3)
//将3隐式转换成Boolean类型的值再取反,输出false
条件表达式
if(3)   // 隐式转换 Boolean(3)
if(undefined)  // Boolean(undefined)
if(null) // Boolean(null)

3 ? 2 : 1  // Boolean(3), 为true, 输出2

4 && undefined ? 2 : 1 // Boolean(undefined), 为true 输出1

算数运算符(*、/、- %、+)和 关系运算符(>、<、==、!=)

算数运算符和条件表达式会将值隐式转换成Number,但是+法运算符有些特殊的规则

转换规则

9ef0ce92834b4aa991f2ba5057ea069b.png

基本数据类型的值转Number

  • Number(1)  // 1
  • Number('1')  // 1
  • Number(true)  // 1
  • Number(null)  // 0
  • Number(undefined)  // NaN
  • Number(NaN)  // NaN
  • Number(Symbol(1))  // 报错

复杂数据类型转Number

const obj = {
  valueOf: function() {
    return 42;
  }
};
  • Number({})  // NaN
  • Number([1]) // 1
  • Number(obj) // 42

1:js会判断该值的原始值(valueOf)是不是基本数据类型,如果是,转换其为Number,如果不是则按如下转换规则。

2:  将Object转换成String,再转换成Number。

算数运算符

+法运算符

运算结果要不是数字,要不是字符串,要不是NaN

做+法运算的时候,当任何非String类型值和String做运算,则会将其转换成String,再拼接字符串

console.log(1 + 1) // 2
console.log(1 + true) // 2
console.log(1 + false) // 1
console.log(true + false) // 1
console.log(1 + '1') // '11'
console.log(1 + undefined) // NaN
console.log([1] + '1')  // '11',先将[1]转换成数字1,此时变成了 1 + '1',做字符串拼接'11'

-、*、/、%法运算符

运算结果要不是数字,要不是NaN

console.log(1 * 1) // 1
console.log(1 - true) // 0
console.log([2] * '1') // 2
console.log([2] / '1') // 2
console.log([2] % '1') // 0
console.log([2] * '1a') // NaN
关系运算符

运算结果总是布尔

console.log(1 == 1) // true
console.log(1 == true) // true
console.log(1 == false) // false
console.log(true == false) // false
console.log(['32'] > 22) // true
console.log(NaN == NaN) // flase

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

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

相关文章

ChaoJi充电连接装置典型试验案例分析 GB/T 20234.1充电连接装置型式试验变化分析

GB/T 20234.1充电连接装置典型试验变化分析 1、ChaoJi充电连接装置典型试验案例分析 1.1、大功率直流充电接口 1.2、枪线尺寸、重量、面积数据对比 1.3、枪线温升对比试验 1.4、chaoji 枪线温升试验 1.5、chaoji枪线防护等级试验 1.6、GB/T 20234.4项目列表 1.7、小结 ✓ 通…

制作飞腾(arm)芯片架构的nexus镜像

nexus官方没有arm架构的镜像&#xff0c;下面介绍一种自己制作镜像的方式 1、事先准备 在一个arm架构机器上安装docker下载nexus的linux版(https://www.sonatype.com/download-oss-sonatype)下载centos的arm架构镜像(docker pull centos-centos8.4.2105)下载arm版本的java8(ht…

lv11 嵌入式开发 ADC 16

目录 1 ADC 简介 2 Exynos4412下的ADC控制器 2.1 总览 2.2 特征 2.3 ADC转换时间 2.4 IO口 ​编辑3 ADC寄存器详解 3.1 寄存器介绍 3.2 ADCCON控制寄存器 3.3 ADCDAT 3.4 CLRINTADC 3.5 ADCMUX ​编辑 4 ADC编程 1 ADC 简介 ADC(Analog to Digital Converter)即…

三菱(MITSUBISHI)CNC数据采集

一&#xff0c;概述 前面介绍过&#xff0c;三菱CNC数据采集一般有两种方法&#xff1a; &#xff08;1&#xff09;通过官方A2 API&#xff08;也叫EZSocket&#xff09;进行数据采集&#xff0c;需要安装A2驱动包&#xff08;仅适用于windows系统&#xff09; &#xff08;…

CentOS7搭建部署NTP服务器

服务端配置&#xff1a; yum install ntp ntpdate -y #下载安装包 修改配置文件&#xff0c;同步阿里的NTP服务器 vim /etc/ntp.conf systemctl start ntpd #启动该服务 ntpq -p #查看是否同步了阿里的NTP 服务端同步成功后&#xff0c;可以去新增…

ssm医药进出口交易系统源码和论文

ssm医药进出口交易系统源码和论文726 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构…

java操作windows系统功能案例(四)

以下是Java操作Windows系统功能的几个案例&#xff1a; 打开系统默认浏览器&#xff1a; Desktop.getDesktop().browse(URI.create("http://www.google.com"));打开文件夹&#xff1a; FileManager fileManager new FileManager(); fileManager.openFolder("…

【risc-v】易灵思efinix FPGA sapphire_soc IP配置参数分享

系列文章目录 分享一些fpga内使用riscv软核的经验&#xff0c;共大家参考。后续内容比较多&#xff0c;会做成一个系列。 本系列会覆盖以下FPGA厂商 易灵思 efinix 赛灵思 xilinx 阿尔特拉 Altera 本文内容隶属于【易灵思efinix】系列。 前言 在efinix fpga中使用riscv是一…

硬件基础:二极管

基本定义 二极管的内部其实就是一个PN结。 把PN结封装起来&#xff0c;两边加上两个电极&#xff0c;就组成了半导体二极管。简称二极管&#xff08;Diode&#xff09; 二极管和PN结一样&#xff0c;具有单向导通性&#xff1a; 外观和正负极 常见芯片封装如下&#xff1a; 一般…

超大规模集成电路设计----MOS器件原理(二)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----MOS器件原理&#xff08;二&#xff09; 半导体物理知识补充介绍1. 半导体材料2. 固体类型…

Python---函数递归---练习:猴子吃桃问题(本文以递归算法 解法为主)

相关链接&#xff1a;Python---函数递归---练习&#xff1a;斐波那契数列&#xff08;本文以递归算法为主&#xff09;-CSDN博客 案例&#xff1a;猴子吃桃问题 猴子吃桃问题。猴子第1天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不过瘾&#xff0c;又多吃了一个。…

从零构建属于自己的GPT系列1:数据预处理(文本数据预处理、文本数据tokenizer、逐行代码解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;文本数据预处理 从零构建属于自己的GPT系列2&#xff1a;语…

C++进阶篇6---C++11新语法

目录 目录 一、统一的列表初始化 二、声明 1.auto 2.decltype 3.nullptr 三、范围for 四、STL中的变化 五、右值引用和移动语义(重点) 一、统一的列表初始化 在c11之前&#xff0c;我们能用{}初始化数组和结构体 struct Point {int x;int y; }; int main() {int a[] …

mac M系列芯片安装chatGLM3-6b模型

1 环境安装 1.1 mac安装conda. 下载miniconda&#xff0c;并安装 curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh sh Miniconda3-latest-MacOSX-arm64.sh1.2 创建虚拟环境并激活 创建名为chatglm3的虚拟环境&#xff0c;python版本为3.10…

操作系统·存储器管理

根据冯诺依曼原理&#xff0c;程序必须先存储在内存中&#xff0c;才可以执行。 在多道程序并发执行的系统存储器管理非常重要。 5.1 存储器管理的功能 5.1.1 主存分配与回收 要完成内存的分配和回收工作&#xff0c;要求设计者选择和确定几种策略和结构&#xff1a; 1.调入…

彻底解决ModuleNotFoundError: No module named ‘exceptions‘【Bug完美解决】

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结心得项目场景: 根据本文可找到bug原因并彻底解决**ModuleNotFoundError: No module named ‘exceptions‘**Bug 报错: E:\Anconda\python.exe c:\Users\24190\PycharmProjects\pythonProject4py尝试 gong…

LLM-Intro to Large Language Models

LLM some LLM’s model and weight are not opened to user what is? Llama 270b model 2 files parameters file parameter or weight of neural networkparameter – 2bytes, float number code run parameters(inference) c or python, etcfor c, 500 lines code withou…

【Docker实操】创建一个Node服务

一、安装node 请查看阿里云官网教程&#xff1a;如何快速部署Node.js项目。&#xff08;注意要在根目录操作&#xff09;apt install nodejs、apt install npm执行上面两个命名来安装 安装完成后&#xff0c;执行node -v、npm -v&#xff0c;如果出现版本&#xff0c;就是安装…

LinuxBasicsForHackers笔记 --常用Linux命令

在终端中修改用户密码命令&#xff1a;passwd Linux的文件系统是逻辑文件系统。 Linux基本命令 pwd – print working directory. 返回你当前所在目录结构中的位置。 whoami – 查看您当前登录的用户身份。 cd – change directory. 从终端更改目录。 cd / – 移动到根目录…

html电子签名

html电子签名 html5实现手写签名板&#xff0c;点击保存即可生成base64格式的图片 使用H5自带的canvas&#xff0c;无需引入js无需引入别的js 效果图 html代码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"…