JS【详解】运算符/操作符 (解构运算符,对象操作符,in,void 操作符,typeof 运算符, instanceof 运算符,赋值运算符,比较运算符,逻辑运算符,三元运算符,运算符的优先级)

发布时间:2026/9/12 23:47:34

JS【详解】运算符/操作符 (解构运算符,对象操作符,in,void 操作符,typeof 运算符, instanceof 运算符,赋值运算符,比较运算符,逻辑运算符,三元运算符,运算符的优先级) 展开运算符...…rest对象解构constuser{name:Tom,age:20,sex:male}const{name,...rest}user console.log(name)// Tomconsole.log(rest)// {age:20, sex:male}数组解构constarr[1,2,3,4]const[a,b,...rest]arr console.log(rest)// [3,4]函数参数剩余参数functionsum(first,...others){console.log(others)// [2,3,4]}sum(1,2,3,4)替代老旧arguments得到真实数组❌ 错误写法const[...rest,last]arr// Rest 不能放前面...数组展开consta[1,2]constb[...a,3,4]console.log(b)// [1,2,3,4]// 复制数组浅拷贝constcopy[...a]对象展开constobj1{x:1}constobj2{...obj1,y:2}// {x:1, y:2}// 合并、覆盖属性constobj3{...obj2,x:99}// {x:99, y:2}函数传参constnums[10,20,30]Math.max(...nums)// Math.max(10,20,30)常见实用场景数组去重[...new Set(arr)]对象合并、属性覆盖不修改原数据实现新增/删除属性函数不定参数接收解构运算符数组用[ ]对象用{ }详见https://blog.csdn.net/weixin_41192489/article/details/123073918对象操作符运算符功能例子new创建对象new Object().访问属性obj.name?.可选访问属性obj.name[]访问属性obj[‘name’]delete删除属性delete obj.namein判断属性是否存在prop in object?.可用于安全地链式访问对象的深层属性letme{name:张三,age:18}// me.job.content 会报错 Uncaught TypeError: Cannot read property content of undefinedconsole.log(me?.job?.content)// undefinedin 运算符判断指定的属性是否在指定的对象或其原型链中存在则返回 true否则返回 falseprop in objectprop 可为 字符串 或 symbol 类型的属性名或 数组索引// 数组中使用 inlettreesnewArray(redwood,bay,cedar,oak,maple);3intrees// 返回true6intrees// 返回falselengthintrees// 返回true (length是一个数组属性)Symbol.iteratorintrees// 返回true (数组可迭代只在ES2015上有效)// 内置对象PIinMath// 返回true// 自定义对象letmycar{make:Honda,model:Accord,year:1998};makeinmycar// 返回true继承的属性返回 truetoStringin{};// 返回truedelete 删除的属性 in 返回 falseletmycar{make:Honda,model:Accord,year:1998};deletemycar.make;makeinmycar;// 返回falselettreesnewArray(redwood,bay,cedar,oak,maple);deletetrees[3];3intrees;// 返回false将一个属性的值赋值为 undefined而没有删除它 in 返回 true。letmycar{make:Honda,model:Accord,year:1998};mycar.makeundefined;makeinmycar;// 返回truelettreesnewArray(redwood,bay,cedar,oak,maple);trees[3]undefined;3intrees;// 返回truevoid 操作符用于返回一个表达式的值是 undefined 的结果。使用场景创建一个无任何跳转的超链接死链ahrefjavascript:void(0)Click me/atypeof 运算符适用于检测值类型 null 除外 、函数和类的数据类型对引用类型的数据只能得到 object参数返回值数值number字符串string布尔型booleanundefinedundefinednullobjectSymbol 数据symbolNaNnumberInfinitynumber函数functionclass类function数组等对象objectinstanceof 运算符判断一个对象是否是由某个指定的构造器函数所创建functionHero(){}varhnewHero();varo{};hinstanceofHero;truehinstanceofObject;trueoinstanceofObject;true算术运算符y5运算符描述例子x 运算结果y 运算结果在线实例加法xy275实例 »-减法xy-235实例 »*乘法xy*2105实例 »/除法xy/22.55实例 »%取模余数xy%215实例 »自增xy66实例 »xy56实例 »–自减x–y44实例 »xy–54实例 »任何值和NaN做运算的结果都是NaN。任何的值和字符串做加法运算都会先转换为字符串然后进行字符串拼接。任何值做-、*、/运算时都会自动转换为Number。result1true1;// 2 1 1result2truefalse;// 1 1 0result31null;// 1 1 0result4100-1// 99a是变量而a和a是表达式a的值等于原变量的值a自增前的值a的值等于新值 a自增后的值实战范例 假设用户输入345怎么分别得到3、4、5这三个数呢得到3的方法345 除以100得到3.45然后取整得到3。即parseInt(345/100) 或 345/100%10得到4的方法345 除以100余数是45除以10得到4.5取整。即parseInt(345 % 100 / 10)或345/10% 10得到5的方法345 除以10余数就是5。即345 % 10即345/1 % 10赋值运算符给定x10和y5运算符例子等同于运算结果在线实例xy无同等写法x5实例 »xyxxyx15实例 »-x-yxx-yx5实例 »*x*yxx*yx50实例 »/x/yxx/yx2实例 »%x%yxx%yx0实例 »??x??yxx??yx10仅当 x 为 null 或 undefined 时将 y 赋值给 x其他如 x||y 即 xx||y xy 即 xxy比较运算符给定 x5运算符描述比较返回值实例等于比较前两边的操作数会被自动转换为相同的数据类型x8false实例 »x5true实例 »绝对等于值和数据类型均相等比较前两边的操作数不会发生数据类型转换x“5”false实例 »x5true实例 »!不等于比较前两边的操作数会被自动转换为相同的数据类型x!8true实例 »!不绝对等于值或数据类型有一个不相等或两个都不相等比较前两边的操作数不会发生数据类型转换x!“5”true实例 »x!5false实例 »大于x8false实例 »小于x8true实例 »大于或等于x8false实例 »小于或等于x8true实例 »任何值和NaN做任何比较都是false。NaN不和任何值相等包括他本身。 会将不同类型的东西转为相同类型进行比较大部分情况下都是转换为数字。例如console.log(66);// 打印结果true。这里的字符串6会先转换为数字6然后再进行比较console.log(true1);// 打印结果trueconsole.log(0-0);// 打印结果trueconsole.log(null0);// 打印结果false全等不会做类型转换严格相等运算符不适用的场景NaNNaN//false-00//true-00//true00//true此时可以使用 ES6 的 Object.is 实现Object.is()ES6 新增语法用于比较两个值是否相等大部分行为和 一致除以下特殊情况Object.is(NaN,NaN);// true Object.is(-0,0);// false Object.is(-0,0);// false注意 0 与 0 的比较两者是相同的。Object.is(0,0);// true -- 与 相同比较规则https://blog.csdn.net/weixin_41192489/article/details/116736255逻辑运算符给定 x6 y3运算符功能例子||或(x 5 || y 5) 结果为 false且(x 10 y 1) 结果为 true!非!(xy) 结果为 true??空值合并校验null??1 结果为 1undefined??1 结果为 1‘’??1 结果为 ‘’??为空值合并校验当??前的值为 null 或 undefined 时则返回??后的值否则返回??前的值。为短路的与如果第一个值为false则不会执行第二个值//第一个值为true会检查第二个值truealert(看我出不出来);// 可以弹出 alert 框//第一个值为false不会检查第二个值falsealert(看我出不出来);// 不会弹出 alert 框两个非布尔值的 运算如果第一个值为true则必然返回第二个值23得到3如果第一个值为false则直接返回第一个值3得到03得到3特别说明此处0转换为布尔值后是true不是false||为短路的或如果第一个值为true则不会执行第二个值两个非布尔值的 || 运算如果第一个值为true则直接返回第一个值1||3得到1如果第一个值为false则返回第二个值||3得到3此现象常用于给变量指定默认值如当a有值时将a赋值给b否则b为10leta;letba||10;// 此时 b 会被赋值为 10此种技巧简单而优雅但以下情况除外当a为虚值时b无法得到a的值leta0;letba||10;// 此时 b 还是 10对非布尔值进行逻辑运算则会先将其转换为布尔值然后再操作。vara10;a!a;//此时a的数据类型为布尔类型值为false【实战】容错处理【重要】当成功调用一个接口后返回的数据为 result 对象。这个时候我们用变量 a 来接收 result 里的图片资源。通常的写法是这样的if(result.resultCode0){letaresultresult.dataresult.data.imgUrl||http://img.smyhvae.com/20160401_01.jpg;}上方代码的意思是获取返回结果中的result.data.imgUrl这个图片资源如果返回结果中没有 result.data.imgUrl 这个字段就用 http://img.smyhvae.com/20160401_01.jpg 作为兜底图片。条件运算符(三元运算符)条件表达式 ? 条件表达式结果为true时的值 条件表达式结果为false时的值voteable(age18)?年龄太小:年龄已达到;如果条件的表达式的求值结果是一个非布尔值会将其转换为布尔值然后再运算。位运算符https://blog.csdn.net/web_green/article/details/136687142运算符的优先级优先级由高到低.、[]、new、--!、~、单目、-单目、typeof、void、delete%、*、/双目、-双目、、、、、、!、^ (位运算中的异或运算符)|||?:、、-、*、/、%、、、、、^、|,()不属于运算符但可用于提升运算的优先级被()包裹的内容会优先计算从最内层的()开始计算逐层展开早上好(obj[name(12)]同学)计算(12)计算[name(12)]计算obj[name(12)]计算(obj[name(12)] 同学)计算早上好 (obj[name(12)] 同学)
延伸阅读

更多相关文章

2026/9/13 1:41:48

如何用parboiled2快速构建高性能解析器?5分钟入门教程

如何用parboiled2快速构建高性能解析器?5分钟入门教程 【免费下载链接】parboiled2 A macro-based PEG parser generator for Scala 2.10 项目地址: https://gitcode.com/gh_mirrors/pa/parboiled2 parboiled2是一个基于Scala 2.12的宏驱动PEG解析器生成库&a…

2026/9/13 15:55:15

WQFN封装芯片PCB布局与焊接工艺全解析:以LM27965为例

1. 项目概述:从一颗芯片的封装说起在硬件工程师的日常里,选型和画板是两件既基础又充满挑战的活儿。你可能会花大量时间研究芯片的数据手册,对比性能参数,但往往容易忽略一个同样关键的环节——封装。封装选对了,PCB布…

2026/9/13 15:52:50

OpenCode工具链:AI驱动的智能开发实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 15:52:50

提示词工程实战:10个技巧稳定提升AI输出质量

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 15:52:50

1Panel服务离线迁移实战:Docker镜像与数据完整搬迁至Ubuntu 22.04

接手过一次“把 1Panel 管理的所有服务迁移到一台离线 Ubuntu 22.04 新服务器”之后,你会发现这类迁移根本不是“拷贝文件、跑起来”这么简单。尤其目标机器在隔离内网里,没有外网、不能在线拉镜像,连 Docker 和 1Panel 本身都得想办法离线装…

2026/9/13 15:52:50

经典层合板理论ABD矩阵计算:MATLAB实现与验证

简介:MATLAB程序包「20190301ABD」提供经典层合板理论(CLPT)下的ABD矩阵计算工具。面向材料科学与工程、复合材料结构分析领域的工程师与研究人员,仅需输入叠层顺序、纤维角度及材料属性,即可计算A、B、D矩阵等关键刚度…

2026/9/13 15:47:49

交通标志识别工业级方案:YOLOv5s轻量化+双路径分类

简介:这是一套面向高校计算机、人工智能等专业学生的交通标志智能检测与识别毕业设计项目,基于Python实现端到端图像识别流程,覆盖数据预处理、模型训练、推理部署等核心环节,适用于课程设计、综合实验及毕设实践。资源包共298个文…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码