发布时间:2026/7/27 17:43:06
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/7/27 17:43:06

如何用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/7/27 17:37:58

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

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

2026/7/27 18:48:09

3分钟快速上手:YOLOv8 AI瞄准辅助终极配置指南

3分钟快速上手:YOLOv8 AI瞄准辅助终极配置指南 【免费下载链接】yolov8_aimbot Aim-bot based on AI for all FPS games 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_aimbot 想要在FPS游戏中获得超越人类的瞄准精度吗?Sunone Aimbot基于…

2026/7/27 18:48:09

identYwaf:揭秘80+Web防护系统的终极盲推断工具

identYwaf:揭秘80Web防护系统的终极盲推断工具 【免费下载链接】identYwaf Blind WAF identification tool 项目地址: https://gitcode.com/gh_mirrors/id/identYwaf identYwaf是一款功能强大的Web应用防火墙(WAF)盲推断工具&#xff…

2026/7/27 18:48:09

TI LM10507 PMU评估套件深度评测与SPI控制实践指南

1. 项目概述与LM10507 PMU核心价值 在嵌入式系统、存储设备乃至各类便携式电子产品的开发中,电源管理单元(PMU)的设计往往是决定项目成败的关键一环。它不仅仅是把电池或适配器的电压转换成几个固定值那么简单,更关乎着整个系统的…

2026/7/27 18:48:09

高速ADC实战指南:从ADC12D1x00RF芯片手册到系统级设计避坑

1. ADC12D1x00RF高速ADC:从芯片手册到实战应用的全方位解析在雷达、卫星通信、高端示波器这些对信号“嗅觉”要求极高的领域,每秒处理数十亿个数据点是家常便饭。这背后,高速模数转换器(ADC)扮演着将现实世界的连续模拟…

2026/7/27 18:43:09

2026 Python + AI 从入门到精通:一篇搞定,所有案例都能跑!

2026年了,学Python还有用吗?AI时代还需要学Python吗?答案比你想的更直接:Python是AI时代的“通用语言” 。84%的开发者已在日常工作中使用AI编码工具——会用Python的人用AI如虎添翼,不会的人连AI生成的代码都看不懂。…

2026/7/27 9:04:58

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/27 0:01:12

xcku5p-ffvb676-2-i 设计 RoCEv2 时 constraints.xdc 配置依据核查记录

constraints.xdc 配置依据核查记录 被核查文件:fpga/vitis/xcku5p/build/constraints/constraints.xdc 目标板卡:RK-XCKU5P-F V1.2(搭载 xcku5p-ffvb676-2-i) 移植母本:fpga/pynq/rfsoc-pynq/build/constraints/constraints.xdc(NVIDIA Holoscan Sensor Bridge 参考工程)…

2026/7/27 0:01:12

TMS320C54x DSP内存映射与I/O模拟配置实战指南

1. 项目概述与核心价值在嵌入式系统开发,尤其是DSP这类资源受限、架构独特的处理器上,内存映射配置和I/O模拟是每个开发者都必须跨越的一道坎。这不仅仅是调试器里的几个菜单选项或命令行参数,它直接关系到你的程序能否在目标板上正确运行、能…

2026/7/27 3:13:33

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…