JavaScript的隐式转换

Dofbot机械臂从零部署笔记(1)——ROS之创建URDF模型、配置Moveit和MotionPlanning 阅读详情

一、 JavaScript 数据类型

js中有7种数据类型,可以分为两类:原始类型、对象类型。

简单数据类型(也称为原始类型):Undefined、Null、Boolean、Number、String 和 Symbol。ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。
复杂数据类型叫 Object(对象)。Object 是一种无序名值对的集合。

二、 JavaScript 隐式转换

在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算。
这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换。
在js中,想要将对象转换成原始值,必然会调用toNumber() 和 toPrimitive() 方法,是内部的。
toNumber() 方法,比较好理解,就是转换成 Number 类型,类似 Number() 方法。
该函数形式如下:
toPrimitive(input,preferedType?)
input是输入的值,preferedType是期望转换的类型,他可以是字符串,也可以是数字。

1. 隐式转换规则

  1. 转成string类型: +(字符串连接符)

  2. 转成number类型:++/–(自增自减运算符) + - * / %(算术运算符) > < >= <= == != === !== (关系运算符)

  3. 转成boolean类型:!(逻辑非运算符)

涉及隐式转换最多的两个运算符 + 和 ==。

2. + 运算符

+运算符即可数字相加,也可以字符串相加。所以转换时很麻烦,有些也比较难理解:
1.字符串连接符+:会把其他数据类型调用String()方法转成字符串然后拼接
2.算术运算符+:会把其他数据类型调用Number()方法转成数字然后做加法计算

//+是字符串连接符:
//String(1)+'true'='1true'
console.log( 1 + "true")://"1true"
//+是算术运算符:
//1 + Number(true)=1+1=2
console.log ( 1 + true);//2
//1+ Number(undefined)=1+NaN=NaN
console.log( 1 + undefined);// NaN
//1+Number(null)=1+0=1
console.log( 1 + null);//1

3. == 运算符

1.对象和布尔值比较

对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字

[] == true;  //false

[]转换为字符串’’,然后转换为数字0,true转换为数字1,所以为false

2.对象和字符串比较

对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。

[1,2,3] == '1,2,3' // true  

[1,2,3]转化为’1,2,3’,然后和’1,2,3’, so结果为true;

3.对象和数字比较

对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。

[1] == 1;  // true  

对象先转换为字符串再转换为数字,二者再比较 [1] => ‘1’ => 1 所以结果为true

4.字符串和数字比较

字符串和数字进行比较时,字符串转换成数字,二者再比较。

'1' == 1 // true

5.字符串和布尔值比较

字符串和布尔值进行比较时,二者全部转换成数值再比较。

'1' == true; // true 

6.布尔值和数字比较

布尔值和数字进行比较时,布尔转换为数字,二者比较。

true == 1 // true

其实规律很简单,大家可以记下边这个图
数据转换
在这里插入图片描述

如图,任意两种类型比较时,如果不是同一个类型比较的话,则按如图方式进行相应类型转换,如对象和布尔比较的话,对象 => 字符串 => 数值 布尔值 => 数值。

[] == false;
![] == false;

这两个的结果都是true,第一个是,对象 => 字符串 => 数值0 false转换为数字0,这个是true应该没问题,
第二个前边多了个!,则直接转换为布尔值再取反,转换为布尔值时,空字符串(’’),NaN,0,null,undefined这几个外返回的都是true, 所以! []这个[] => true 取反为false,所以![] == false为true。

4. >运算符

  1. 当关系运算符两边有一边是字符串的时候,会将其他数据类型使用Number()转换,然后比较关系↓

    console.log("2">10 );//false Number(2)>10=2 >10=false
    
  2. 当关系运算符两边都是字符串的时候,此时同时转成number然后比较关系。此时并不是按照Number()的形式转成数字,而是按照字符串对应的unicode编码来转成数字。使用这个方法可以查看字符的unicode编码:字符串.charCodeAt(字符下标,默认为0).

    console.log("2">"10");//true
    //'2'.charCodeAt()>'10'charCodeAt()=50>49=true
    console.log("2".charCodeAt())://数字50
    console log("10".charCodeAt())://数字49(默认返回第一个字符的编码,如果想要查自第二个字符可以传参下标)
    

    多个字符从左往右依次比较↓

    console.log( "abc" > "b" );//false
    先比较'a'和'b','a'与'b'不等,则直接得出结果
    console log ( "abc" > "aad")//true
    先比较'a'和'a',两者相等,继续比较第二个字符
    'b'与'a' ,得出结果,
    console.log("a".charCodeAt())://数字97
    console.log("b".charCodeAt())://数字98
    
  3. 特殊情况(无视规则):
    如果数据类型是 undefined与null,,得出固定的结果

console.log( undefined == undefined);//true
console.log( undefined == null);//true
console.log( null == null);//true
console.log( NaN == NaN );//false
console.log( Number('as') == NaN );//false

Null类型的比较不等于1或0(实际上,null仅与undefined 相当),但当强制转换ToNumber(null)===0;(但一定要注意区分null和0)
NaN与任何数据比较都是NaN ,Number(‘as’) 输出 NaN 。NaN == NaN 为什么是 false。其实 js 规定的NaN 不等于NaN。

5. 复杂数据类型

在隐式转换时会先转成String,然后再转成Number运算

{}+[]//0
[]+{}//"[object Object]"
0+{}//"0[object Object]"
{}+0//0

是因为{}可以是空块或空对象文字,具体取决于上下文。

可以是一元加运算符,也可以是连接运算符,具体取决于上下文。
第一个代码示例是一个空块,它可能也不存在,使表达式相同+[],意思是“空数组转换为数字”。

你不能把一个块作为一个函数参数,所以第二个代码示例{}是一个对象,代码的意思是“用一个数组来传递一个对象”(隐式地将对象和数组转换为字符串)。换句话说,{} + []表达式是一个empty代码块,后面跟array一个数字(Number[])的约束。

在第二个示例中,您只是向concat数组提供了一个对象文字(空对象)。这就是你收到的原因[object Object]。

实例:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到字符串[object Object] (注意第一个小写o,第二个大写O)
在这里插入图片描述
在这里插入图片描述
== 等号两边都为对象时,比较的是地址

[]==[]//false
{}=={}//false
2026.2.3:OpenClaw国内安装教程,国内网络使用,服务器部署,对接飞书 本文介绍了如何创建飞书应用并接入OpenClaw机器人的完整流程。主要内容包括:1)在飞书开放平台创建企业自建应用,添加机器人能力并开通相关权限;2)在Windows11系统上安装OpenClaw,完成配置文件的修改(需将bind改为"lan");3)配置MiniMax国内接口地址,重启gateway服务。整个过程涵盖了应用创建、权限设置、软件安装、服务配置等关键步骤,为开发者提供了详细的飞书机器人接入指南。 阅读详情

相关推荐

matinal:SAP 采购中形成的差异

如果库存足够会影响到物料。

matinal 當冬夜漸暖 。公众号:matinal 819

js中的隐式类型转换有哪些

在前端js这门语言中,不仅存在着显示类型转换,还存在许多隐式类型转换,让人头大。为了减少小伙伴们的踩坑,今天总结了一些常见的隐式类型转换规则,让我们来看看有哪些。

ThisEqualThis的博客 1645

Python实战:3步搞定DICOM转JPG/PNG(附批量处理脚本)

本文详细介绍了如何使用Python在3步内将DICOM医学影像转换为JPG/PNG格式,并提供了批量处理脚本。通过Pydicom、Pillow和NumPy库的组合,解决了像素值处理、批量转换效率和医学图像特性保留等关键问题,适合医疗AI开发者和放射科医生快速集成到工作流中。

numpy6sculptor的博客 590

深入理解隐式类型转换

文章目录一、隐式类型转换1.转换的原因2.转换的意义3.如何进行转换4.整型提升的例子二、算术转换1.如何进行转换2.例题3.总结三、操作符的属性1.操作符2.问题表达式 一、隐式类型转换 1.转换的原因 C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。 2.转换的意义 表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度 一般就是int的字节长度,同时也是CP

Welcome to my blog. 1万+

碳酸钙岩石酸蚀酸溶COMSOL建模:非均质对酸蚀通道的影响

多孔介质中的流动与化学反应耦合是石油工程和地下资源开发中的核心问题,酸液与岩石矿物的溶蚀过程直接关系到酸化增产效果。在碳酸盐岩储层中,盐酸与方解石的反应速率极快,酸液会优先沿高渗透区域推进,形成指状酸蚀通道,即wormhole。传统均质模型难以描述这种局部溶蚀行为,而数值模拟工具COMSOL通过耦合达西定律、稀物质传递与孔隙度演化方程,能够定量刻画酸蚀路径与渗透率的变化规律。工程实践中,模拟结果可用于预测酸液突破体积、优化注入排量,并为基质酸化方案设计提供依据。本文围绕碳酸钙岩石酸蚀酸溶COMSOL模型,探

weixin_29009401的博客 327

云计算虚拟化实验(一)——虚拟机软件VMware的安装以及虚拟机系统的安装(Windows7+CentOS7)

主要内容: 1、虚拟机软件的安装(以VMware为例) 2、虚拟机系统的安装(Window7 + CentOS7) 3、虚拟主机网络互访 4、不同局域网内的虚拟主机互访(软路由——海蜘蛛) 0 ——首先介绍一下什么是虚拟化? 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在

gg_asd的博客 1万+

隐式转换这个概念你听说过没?

本期讲解:隐式转换中的整型截断和整型提升。

我的主页 4375

学术规范与论文写作(雨课堂)研究生 全部答案

1:如何造就优秀的学术论文 论文语法判断题 :全部是错的 2:如何撰写学术论文 3: SCI论文写作经验分享 4:论文写作与投稿技巧 5:学术伦理道德 答案仅供参考,研究生生活不易,大家如果有时间的话,还是可以学习学习的,毕竟老师讲的不错。加油,希望读研的每一个人都能顺利毕业! ...

Always-Learning 13万+

【C语言】基础数据类型的隐式转换、截断和整型提升(超详细)

本文主要讲解了基础数据类型的隐式转换、截断和整型提升。这些都是我们在学习C语言时必须要注意的细节。同时本文存在着许多干货,欢迎大家来看哦~

tianxiawushanu的博客 3185

ADT MCP Server 把 ABAP 开发带进 Agent 模式

今天讨论 ADT MCP Server,不能只把它看成 Visual Studio Code 里多出来的一个开关。它真正有意思的地方,在于它把 ABAP 后端开发里那些原本需要手工点击、手工创建、手工激活、手工查服务元数据的动作,包装成一组可以被 GitHub Copilot 这类 coding agent 调用的工具。SAP 在 RAP130 练习里把它描述为运行在 ADT for Visual Studio Code 扩展内部的本地 HTTP Server,它实现的是 Model Context Pro

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 183

【2025华为OD机考真题】- 简易内存池(B卷-200分)(C版)

🔔本文收录于「最新最全华为OD机试真题(C版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!! 🚫提醒:拒绝一切代考/替考,违法必究!专栏所写题库均精心搜集于互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验所撰,欢迎订阅。    💗订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新皆可阅

**My Coding Family** 961

JavaScript的数据类型转换--隐式转换

所谓隐式转换,就是我们在写代码时看不见,但是JavaScript解释器会自动帮我们转换的操作隐式转换的本质是通过ToPrimitive将值转化为原始值,主要涉及到三种转换:1.将值转为原始值 ToPrimitive()2.将值转为数字 ToNumber()3.将值转为字符串 ToString()PreferredType转换策略。...

adqawere的博客 1419

基于XGBoost的混凝土力学性能预测系统

本文介绍了一个基于XGBoost算法的混凝土力学性能预测系统。该系统通过模拟生成3000组混凝土配合比数据(包含水灰比、水泥用量和龄期三个关键特征),利用XGBoost强大的非线性建模能力预测混凝土抗压强度。研究背景源于传统混凝土性能测试方法耗时耗力的痛点,该系统可显著减少实验次数,优化配合比设计。系统实现包括:数据生成与特征工程(模拟真实工程数据并添加噪声和异常值)、XGBoost模型构建、以及预测性能评估。XGBoost算法因其处理非线性关系能力强、鲁棒性好等优势被选用,可为智能建造和数字化施工提供技术

huanghm88的专栏 128

【Js】JavaScript数据类型隐式转换

类型相同基本类型,直接比较值引用类型比较指针类型不同,尝试转成number类型,先调用valueOf()转成number不行就再用toString()方法转成stringnull、NaN、undefined单独一套规则。

m0_57135756的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最全的js隐式转换

隐式转换 隐式转换介绍 在js中,当运算符在运算时,如果两边数据(这里为啥不写数据类型呢是因为两边的类型不同其实也会发生隐式转换,往下看你会更加了解)不统一,CPU就无法计算,编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算,这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换

vita_min123的博客 5664

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JavaScript隐式转换

JavaScript 隐式转换

LBJ辉的前端天地 3203

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

javascript 隐式转换

你有没有在面试中遇到特别奇葩的js隐形转换的面试题,第一反应是怎么会是这样呢?难以自信,js到底是怎么去计算得到结果,你是否有深入去了解其原理呢?下面将深入讲解其实现原理。 其实这篇文章初稿三个月前就写好了,在我读一些源码库时,遇到了这些基础知识,想归档整理下,就有了这篇文章。由于一直忙没时间整理,最近看到了这个比较热的题,决定把这篇文章整理下。 ``` const a = { i: 1, ...

wanda000的博客 218

JS中各种的隐式数据转换

隐式转换介绍 · 1.2 隐式转换规则 · 1.3 坑一:字符串连接符与算术运算符隐式转换规则混淆 · 1.4 坑二:关系运算符:会把其他数据类型转换成number之后再比较关系 · 1.5 坑三:复杂数据类型在隐式转换时会先转成String,然后再转成Number运算 · 1.6-坑四:逻辑非隐式转换与关系运算符隐式转换搞混淆 1.1-隐式转换介绍 · 在js中,当运算符在运算时...

alihlz_39337506的博客 1477

谈谈JS中的隐式转换

在什么条件下会触发隐式转换机制? 在进行比较运算,或者进行四则运算时,常常会触发JS中的隐式转换机制。 首先要记住JS设计者的初衷是美好的,他希望 == 是美好的操作选择,但是在美好的希望也是希望。 小案例 为什么 [] == false ? 类型不同比较时,需要先做类型转换,==比较时有布尔值参与时,需要比较双方均转为数字,[ ]是非原值,需要转换为原值二者才能进行比较,大部分对象转换为...

扫地僧 2827

JS的隐式转换

JavaScript中的隐式转换是指在运行过程中,代码自动将一个数据类型转换为另一个数据类型,而无需显式地调用转换函数。JavaScript是弱类型语言,这意味着它不像Java,C++一样的强类型语言有预先确定的类型。并且变量的类型是由值的类型来决定的,这导致了一个问题,一个变量可能上一步骤操作中还是String,下一步操作可能立刻变为了Object,为了解决不同类型无法进行计算,JS底层会将不同类型转换为同一类型,由JS运行环境自动帮我们去做的类型转换。

liu62615的博客 1089

JavaScript函数及隐式转换

JavaScript函数 概念与Java中方法类似,也是将一些代码进行封装,之后再需要的地方直接使用函数的名称进行调用,解决了重复代码的问题 js中函数的声明 使用function进行声明 声明的时候没有定义返回值 参数没有指定类型,直接给出参数名称 返回值根据需求,可有可无 function 函数名(参数1,参数2...){ //js代码 [return 返回的数据] } eg: fu...

hcwdd的博客 812

javascript 前端面试之隐式转换 js隐式转换

注 复杂数据类型([],{})在隐式转换时会先转成String,然后再转成Number运算 基本类型隐式转换无特殊 0、-0、NaN、’’、null、undefined、document.all在Boolean转换为false值,其余任何值都会被转换为true 1、转String类型 +(字符串连接符)一方为string类型则直接进行字符串拼接,优先级高于number //+(字符串连接符) console.log(1+'abc') // '1abc' console.log(true + 'abc').

weixin_42508580的博客 403

js 10分钟学会隐式转换

在javascript语言中的数据类型有7种,分别为: 原始值:boolean,undefined, null,number,string,symbol(es6新增) 对象值:Object 各数据类型之间的转换被称为`类型转换`,类型转换也被叫做隐式转换

guoqing的博客 322

JavaScript隐式转换,js偷偷摸摸背着我们都做了些什么

一、隐式转换规则: 隐式转换中主要涉及到三种转换: 1.ToPrimitive() — 将值转换为原始值(截止到目前,原始值一共有7个, Null,Undefined,String,Number,Boolean,Symbol,BigInt) Tip: ① 转换结果一定是一个原始值 ② 若是不传参,对象为Date类型的,默认为String,其余的则为Number,ToPrimitive(input,...

不见浅诗的博客 626

JavaScript:隐式转换、显示转换、隐式操作、显示操作

JavaScript 中的隐式转换是指不需要显式地调用转换函数,而是在执行期间自动发生的数据类型的转换。即在使用不同类型的值进行操作时,JavaScript会自动进行类型转换。这种转换通常发生在不同数据类型之间进行运算或比较时。valueOf()toString()1、如果对象具有valueOf()方法,则 JavaScript 将首先调用该方法。valueOf()方法返回对象的原始值,通常是一个数字或布尔值。2、如果对象没有valueOf()方法,或者valueOf()

snow的博客 909

彻底弄懂JS隐式转换

一、什么是隐式转换? 定义:由编译器自动完成类型转换的方式就称为隐式转换。 二、转换规则 2.1 基本数据类型 2.1.1将值转为字符串 字符串连接符+ 使用这一规则。(只要+两边出现了字符串就是字符串连接符。)编译器将非string类型的值转为string类型,然后再将其拼接成一个新的字符串。 const test = 1 + '0' + true + undefined + null; console.log(test); // 10trueundefinednull console.log(typeo

m0_37622071的博客 943
上一篇: JavaScript基础 ——【数据类型的转换】
下一篇: JavaScript 的运算符
impact_factor
博客等级 码龄6年 32粉丝 44原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值