惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Check Point Blog
Hacker News: Ask HN
Hacker News: Ask HN
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
WordPress大学
WordPress大学
P
Proofpoint News Feed
V
Visual Studio Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
N
Netflix TechBlog - Medium
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - 叶小钗
Cisco Talos Blog
Cisco Talos Blog
S
Schneier on Security
T
Threat Research - Cisco Blogs
腾讯CDC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Hacker News
The Hacker News
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
GbyAI
GbyAI
N
News | PayPal Newsroom
L
LINUX DO - 最新话题
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Palo Alto Networks Blog
T
Tenable Blog
S
Secure Thoughts
T
Threatpost
V2EX - 技术
V2EX - 技术
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Vercel News
Vercel News
罗磊的独立博客
P
Privacy & Cybersecurity Law Blog
Engineering at Meta
Engineering at Meta
小众软件
小众软件
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
Y
Y Combinator Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
P
Privacy International News Feed
H
Heimdal Security Blog
量子位
B
Blog

博客园 - lzhdim

JavaScript 中的原型与继承 1分钟查清局域网所有IP 20260714 - 个人小作品更新 WorkBuddy 完整教程手册 专为AI而生的企业级QLC SSD!长江存储PE501 61.44TB评测:超过1PB的写入测试 32GB显存才是第一生产力!英特尔锐炫 Pro B70评测:中小企业AI降本神器 JavaScript中的this关键字 C#开发的PopoSaver泡泡屏保应用 - 开源研究系列文章 - 个人小作品 6天不间断测试告诉你到底有多省电!米家空调巨省电大1.5匹评测:制冷峰值功率不超过500W 三倍双摄加持 + D-Log 2 曲线!大疆DJI OSMO Pocket 4P全面评测:补齐短板,化身口袋电影机 晶栈4.0闪存立威!长江存储致态TiPro9000 2TB SSD评测:缓外写入超4GB/s独一档 C# 多线程同步机制详解:原理、使用与性能对比 JavaScript作用域与闭包讲解 最受欢迎的 10 大免费 AI 工具 六种AI生意,从月入一万到月入十万 5个国产大模型实测对比2026:DeepSeek、Kimi、豆包、通义、智谱哪个好用 豆包、元宝、千问、Kimi、DeepSeek,这么多AI软件,到底该用哪个? 微软免费开源了一个 Linux 操作系统,没错!是微软出品 一次看懂5种咖啡冲煮方式:意式、手冲、法压、冷萃、摩卡壶到底有什么区别 120个 实用CSS 技巧汇总合集 C#开发的ScreenSaver屏保应用 - 开源研究系列文章 - 个人小作品 WinForm 中跨线程操作 UI 的解决方案 JavaScript变量与数据类型详解 苹果良心!iOS 27适配设备公布:30款机型 7年前的iPhone 11还能升级 C++图形用户界面开发入门 10个不该免费的GitHub神级项目 JavaScript语言全面概述:从历史到现代实践 一张图看懂常见咖啡 C盘空间多出来4GB:谷歌服软 Chrome本地AI大模型可禁用、删除了 96GB显存运行230B大模型!七彩虹灵创K16笔记本评测:160W性能释放 AMD锐龙AI Max+ 395加持全能移动AI工作站 AI PC最强存储搭档!雷克沙NM1090 PRO 8TB固态评测:14400MB/s满速不缩水 C#已经不是当年的C#了——我用它写了个微秒级数据库引擎 EasyTool:轻量全能的 .NET 工具类库 SQL 入门 17:MySQL 数据类型:从字符串到 JSON 的全面解析 SQL 入门 16:SQL 事务隔离级别与死锁解析(易懂) 原相3955XM+TL3228主控!小米电竞鼠标2全面评测:原生双8K究竟有多强 PCIe 4.0火力全开:闪迪奥丁马仕GX 7100 NVMe SSD上手 超乎预料的千元级电竞主板!七彩虹iGame B850M Ultra-OC V14主板评测 SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题 名人 - 我的闪存 C#性能优化技巧 SQL 入门 14:SQL 触发器与事件:自动化数据处理 38个实用的JavaScript 技巧 一款基于 .Net WinForm 开发的节点编辑器,纯 GDI 实现,体积仅 100+Kb Masuit.Tools:这个 C# 工具库 SQL 入门 13:SQL 存储过程与函数:封装逻辑与参数处理 49个 JavaScript 代码快捷技巧,让你在 2026 年成为代码高手 20260503 - 个人小作品更新 SQL 入门 12:SQL 视图:创建、修改与可更新视图 C#如何实现Windows系统桌面截图功能... 6999元AMD新旗舰首测!锐龙9 9950X3D2性能解禁:这颗U根本不是给游戏玩家造的 SQL 入门 11:日期时间格式化、IF、CASE的使用 基于C#的校时类库的实现及使用 - 开源项目研究文章 39g无打孔+原生双8K!雷柏VT0 Air MAX / VT3s Air MAX鼠标评测:轻到飞起还快到极致 WinForm 中控件自适应窗体变化 20260413 - 个人小作品更新 SQL 入门 10:SQL 内置函数:数值、字符串与时间处理 最强麒麟芯+自研风冷 华为Mate80 Pro MAX 风驰版全面评测:涡轮散热封神 性能稳到骨子里 WiFi8核心技术特性与性能分析 2026年最新AMD/Intel桌面CPU排名:多线程、单线程、游戏性能谁才是第一 用DG对C盘进行扩容 - 初学者系列 - 学习者系列 还有比它更强的OEM固态吗!长江存储PC550 1TB评测:不用散热片也能满速的PCIe 5.0 SSD SharpCompress:跨平台的 C# 压缩与解压库 SQL 入门 9:SQL 高级子查询:ANY、EXISTS 与多位置应用 盘点接私活20个最实用的 .NET 开源项目 C#中加载图片的资源释放 20260404 - 个人小作品更新 开启iphone的墙纸玻璃效果 可能是综合性能最强的PCIe 5.0 SSD!铠侠EXCERIA PRO G2 2TB评测:AIDA64线性写入全程不掉速 SQL 入门 8:SQL 复杂查询:子查询与ALL关键词 性能最强的锐龙AI 9 H 465轻薄本!华硕无畏Pro16锐龙版2026评测 4盘RAID 0读写超1100MB/s!希捷酷狼Pro 32TB硬盘评测:百万文件快速完成备份 项目(Project)、项目集(Program)、项目组合(Portfolio) SQL 入门 7:SQL 聚合与分组:函数、GROUP BY 与 ROLLUP
JavaScript运算符与表达式详解
lzhdim · 2026-06-25 · via 博客园 - lzhdim

一、算术运算符算术运算符是咱们最熟悉的老朋友了,但 JavaScript 给它们加了一些"特殊技能".1) 基本算述运算符

let a = 10;let b = 3;
console.log(a + b);  console.log(a - b);  console.log(a * b);  console.log(a / b);  console.log(a % b);  
console.log(1 / 0);  console.log(-1 / 0); console.log(0 / 0);  

2) 指数运算符(**)

console.log(2 ** 3);  console.log(3 ** 2);  
//以前我们得用 Math.pow()console.log(Math.pow(23));  

3) 自增自减

let x = 5;
//后置自增:先返回值,再自增console.log(x++);  console.log(x);    
let y = 5;// 前置自增:先自增,再返回值console.log(++y);  console.log(y);    

4) 一元加和一元减, 这俩运算符能把其他类型转为数字

let str = "123";console.log(+str);  console.log(-str);  
let isTrue = true;console.log(+isTrue);  console.log(-isTrue);  
let isFalse = false;console.log(+isFalse); 

二、比较运算符1) 基本比较运算符

console.log(5 > 3);   console.log(5 < 3);   console.log(5 >= 5);  console.log(5 <= 4);  

2) 相等(==)与严格相等(===)

console.log(5 == "5");   console.log(5 === "5");  
console.log(0 == false);  console.log(0 === false); 
console.log(null == undefined);  console.log(null === undefined); 

建议在大多数情况下使用 === 和 !==, 可以避免很多隐式类型转换带来的意外行为. 3) 特殊比较情况

console.log(NaN === NaN);  console.log(Object.is(NaNNaN));  
// 比较字符串时按字典序比较console.log("apple" < "banana");  console.log("2" > "12");  

三、逻辑运算符逻辑运算符不只是用于布尔值, 在 JavaScript 中它们有更多灵活用法.1) 基本逻辑运算符

//逻辑与(&&):两边都为true才返回trueconsole.log(true && true);   console.log(true && false);  
// 逻辑或(||):至少一边为true就返回trueconsole.log(true || false);  console.log(false || false); 
// 逻辑非(!):取反console.log(!true);  console.log(!false); 

2) 短路求值

//&& 的短路特性:如果第一个操作数为假,直接返回它,不计算第二个console.log(0 && "hello");  console.log("" && 123);     
//||的短路特性:如果第一个操作数为真,直接返回它,不计算第二个console.log("hello" || 0);  console.log(123 || "world"); 

利用这个特性可以做很多简洁的操作:

// 设置默认值let name = "";let displayName = name || "匿名用户";  
//条件执行函数function logMessage() {  console.log("消息已记录");}let debugMode = true;debugMode && logMessage();  //只有当debugMode为true时才执行

3) 逻辑运算符的返回值

console.log(1 && 2);  //2 (因为1为真,返回第二个操作数)console.log(0 && 2);  //0 (因为0为假,直接返回第一个操作数)console.log(1 || 2);  //1 (因为1为真,直接返回第一个操作数)console.log(0 || 2);  //2 (因为0为假,返回第二个操作数)

四、赋值运算符1) 基本赋值运算符

let x = 10;  x += 5;      //等同于 x = x + 5console.log(x);  
x -= 3;      //等同于 x = x - 3console.log(x);  
x *= 2;      //等同于 x = x * 2console.log(x);  
x /= 4;      //等同于 x = x / 4console.log(x);  

2) 解构赋值解构赋值是ES6的超实用特性, 可以轻松提取数组或对象中的值数组解构:

let colors = ["红""绿""蓝"];
//传统方式//let first = colors[0];//let second = colors[1];
// 解构赋值方式let [first, second] = colors;console.log(first);  console.log(second); 
//跳过某些元素let [ , , third] = colors;console.log(third);  
//默认值let [a, b, c, d = "默认值"] = colors;console.log(d);  

对象解构:

let person = {  name"张三",  age30,  address: {    city"北京"  }};
//传统方式//let name = person.name;//let age = person.age;
//解构赋值方式let { name, age } = person;console.log(name);  console.log(age);   
// 重命名变量let { name: personName, age: personAge } = person;console.log(personName);  console.log(personAge);   
// 嵌套解构let { address: { city } } = person;console.log(city);  
// 默认值let { name, job = "工程师" } = person;console.log(job);  

函数参数解构

//传统方式function printPerson(person) {  console.log(`姓名: ${person.name},年龄: ${person.age}`);}
//解构方式function printPerson({ name, age }) {  console.log(`姓名: ${name},年龄: ${age}`);}
printPerson(person);  //姓名: 张三,年龄: 30

变换变量值

let a = 1, b = 2;[a, b] = [b, a];  //交换a和b的值console.log(a, b); 

五、其他运算符1) 三元运算符

let age = 20;let canDrink = age >= 18 ? "可以喝酒" : "不能喝酒";console.log(canDrink);  

三元运算符可以嵌套, 但最好不要嵌套太多层, 否则会影响可读性

let score = 85;let grade = score >= 90 ? "A" :             score >= 80 ? "B" :            score >= 70 ? "C" :            score >= 60 ? "D" : "F";console.log(grade);  // "B"

2) 空值合并运算符(??) , 用于处理 null 或 undefined 的情况

let userInput = null;let value = userInput ?? "默认值";console.log(value);  
//与 || 的区别let count = 0;console.log(count || 10);  console.log(count ?? 10);  

3) 可选链运算符(?.) , 可以用于安全访问嵌套对象属性

let user = {  profile: {    name"李四",    address: {      city"上海"    }  }};
//传统方式let city;if (user && user.profile && user.profile.address) {  city = user.profile.address.city;}
//可选链方式let city = user?.profile?.address?.city;console.log(city);  
// 如果某个中间属性不存在let city2 = user?.profile?.job?.title;  console.log(city2);  
// 也可以用于函数调用let obj = {  method() {    return "hello";  }};console.log(obj.method?.());  console.log(obj.nonexistentMethod?.());  

六、运算符优先级当表达式中有多个运算符时, JavaScript 会按照优先级顺序来计算. 下面是一些常见运算符的优先级(从高到低): 

1. 成员访问 .、带括号的调用 ()new (带参数列表)

2. new (无参数列表)

3. 后置递增++、后置递减--

4. 逻辑非!、一元加+、一元减-、前置递增++、前置递减--typeofvoiddeleteawait

5. 幂 **

6. 乘*、除/、取余 %

7. 加 +、减 -

8. 关系运算符<<=>>=instanceofin

9. 相等==!====!==

10. 逻辑与 &&

11. 逻辑或 ||

12. 条件(三元)运算符 ? :

13. 赋值 =+=、-= 等

14. 逗号,

示例说明:

let result = 5 + 3 * 2;  //11 不是16,因为乘法优先级高
let a = 1, b = 2;let c = a++ + b;  //3 (a++返回1,然后a变为2)
let d = 2 ** 3 * 2;  //16 (23次方是8,再乘以2)
let e = 5 > 3 && 2 < 4;  //true (先比较,再逻辑与)
let f = true ? false : true ? 1 : 0;  //false (从右向左结合)