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

推荐订阅源

博客园 - 聂微东
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
GbyAI
GbyAI
Vercel News
Vercel News
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
Jina AI
Jina AI
B
Blog
Recorded Future
Recorded Future
MyScale Blog
MyScale Blog
I
InfoQ
aimingoo的专栏
aimingoo的专栏
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
爱范儿
爱范儿
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
博客园 - Franky
Schneier on Security
Schneier on Security
V
V2EX
TaoSecurity Blog
TaoSecurity Blog
H
Hacker News: Front Page
Cloudbric
Cloudbric
D
DataBreaches.Net
B
Blog RSS Feed
P
Palo Alto Networks Blog
云风的 BLOG
云风的 BLOG
NISL@THU
NISL@THU
I
Intezer
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyberwarzone
Cyberwarzone
F
Fortinet All Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
K
Kaspersky official blog
Forbes - Security
Forbes - Security

博客园 - 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#的校时类库的实现及使用 - 开源项目研究文章
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 (从右向左结合)