当前位置: 首页 > news >正文

JavaScript 赋值运算符

JavaScript 赋值运算符


一、基础赋值运算符

1. 简单赋值 =

let x = 10;       // 变量初始化 
const PI = 3.14;  // 常量声明 
let obj = {a:1};  // 对象引用传递(非深拷贝)

2. 链式赋值

let a, b, c;
a = b = c = 5;    // 从右向左执行:c=5 → b=c → a=b 

3. 解构赋值(ES6+)

// 数组解构 
let [x, y] = [1, "text"];  // x=1, y="text"
 
// 对象解构 
let {name, age} = {name: "Alice", age: 25};

二、复合赋值运算符(更新变量)

4. 算术复合运算

运算符等效表达式示例结果
+=x = x + yx=3; x += 2;5
-=x = x - yx=5; x -= "3";2(隐式转换)
*=x = x * yx=2; x *= 1e3;2000
/=x = x / yx=10; x /= "2";5
**=x = x**yx=3; x **= 2;9
%=x = x % yx=10; x %= 3;1

5. 位运算复合

let n = 5;  
n <<= 1;    // 左移1位 → 10(二进制 101 → 1010)
n |= 0b001; // 按位或 → 11(二进制 1010 | 0001 = 1011)

三、逻辑赋值运算符(ES2021+)

6. 短路赋值

运算符等效逻辑典型场景
&&=x = x && y条件初始化:config.debug &&= true
`=`
??=x = x ?? y避免覆盖null/undefined:value ??= 0

示例对比:

let a = 0;
a ||= 10;    // a保持0(0非假值,但 || 认为0是假值)
a ??= 10;    // a保持0(?? 仅处理null/undefined)

四、特殊赋值场景

7. 对象属性动态赋值

const key = "age";
const person = {};
person[key] = 30;      // {age:30}
 
// 计算属性名(ES6)
const obj = { [key.toUpperCase()]: 25 }; // {AGE:25}

8. 函数返回值赋值

function getData() { return [1, [2,3]]; }
let [num, [, subNum]] = getData();  // num=1, subNum=3 

五、运算符优先级与注意事项

9. 优先级规则

运算符类型优先级示例解析
赋值运算符 =系列3(最低)x = y = 5 → 先执行y=5
逗号运算符 ,1x = (y=2, y+3) → x=5

10. 避坑指南

  • 隐式类型转换风险

    let str = "5";
    str += 3;     // "53"(字符串拼接)
    str =+ 3;     // 3(错误写法,实为 str = +3)
    
  • 不可变值的操作

    const arr = [1,2];
    arr[0] = 99;  // 允许(修改引用内容)
    arr = [3,4];  // 报错(禁止重新赋值)
    
  • 解构默认值设定

    let {width=100, height=200} = {width: null};
    // width=null(默认值对null无效),height=200 
    

总结:JavaScript 赋值运算符从基础的 = 到现代的逻辑赋值 ??=,展现了语言的高效演进。关键要掌握复合运算符的隐式转换规则、解构赋值的模式匹配能力,以及优先级对运算顺序的影响。在复杂场景中,建议通过括号明确运算顺序,并优先使用 const 声明避免意外修改。

相关文章:

  • windows剪切板的内容无法拷贝到虚拟机virtualbox里的Rocky Linux中 --Draft
  • Unity图形学Shader快速回顾
  • C++ Json-Rpc框架-2框架(服务端模块 客户端模块 框架设计)
  • 【Python】【PyQt5】设置事件绑定(例为按钮点击显示提示框)
  • 生物信息复习笔记(2)——测序基本概念
  • xampp安装教程与配置
  • React Router使用方法
  • 单片机开发资源分析实战——以STM32F103ZET6为例子,分析我们的单片机
  • matlab的meshgrid
  • 从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.1自注意力机制(Scaled Dot-Product Attention)的逐行代码实现
  • kali没网 | 配置代理
  • 算法-分治
  • VSCode相关文件折叠展开
  • 【数据分析】有关前文的复习
  • 数据结构——树
  • 《大数据视角下美团优选消费者购买决策影响因素研究》开题报告
  • nest学习(5)
  • 《AI大模型趣味实战 》第7集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 1
  • Web网页
  • Windows下编译安装Qt5.15.0指南
  • 中方对原产印度进口氯氰菊酯实施反倾销措施,商务部回应
  • 何立峰将访问瑞士、法国并举行中美经贸高层会谈、第十次中法高级别经济财金对话
  • 短剧剧组在贵州拍戏突遇极端天气,演员背部、手臂被冰雹砸伤
  • 中国公民免签赴马来西亚的停留天数如何计算?使馆明确
  • “五一”假期国内出游3.14亿人次,同比增长6.4%
  • 上海模速空间“北斗七星”与“群星”生态布局,正在做些什么?