【JS运算符/表达式】`?.` `??` `...` `,` `&&=` `||=` `?:`等运算符讲解

运算符:除了以下demo代码的内容,其他不常用的就不写了

javascript 复制代码
// 常用运算符:
// 最常用的 = + - * / > < >= <= && || 就不说了

// 取余 %
console.log(10 % 3); // 1

// 加法赋值运算符 +=
// let a = 1;
// console.log((a += 10)); // 11

// 逻辑与赋值(&&=) 逻辑与赋值(x &&= y)运算仅在 x 为真值时为其赋值。
let a = 2
a &&= 10
console.log(a); // 10

// 逻辑或赋值(||=) 逻辑或赋值(x ||= y)运算仅在 x 为假值时为其赋值。
// let a = 'sb'
// a ||= 10 // 10
// console.log(a); // sb

// 空值合并运算符(??): 当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。
console.log(''??'77'); // ''
console.log(null ?? 'sb'); // sb
// 逻辑空赋值(??=):  仅在 x 是空值(null 或 undefined)时对其赋值。
// let a  = 0;
// a??=20
// console.log(a); // 0

// 可选链运算符(?.) 使用?.访问对象深层的属性,可不用明确验证每个引用是否有效;
// obj.val?.prop;
// obj.val?.[expr];
// obj.func?.(args);
// let a = {
//   fn1() {
//     console.log("sb");
//   },
//   cat: "ming",
// };
// console.log(a.dog?.name, a.fn2?.());

// ... 展开语法
// 数组 ...[1,2,3]  > 1,2,3
// 对象 let newObj = {...oldObj} // oldObj的键值对将会赋值给newObj对象
// 字符串  ...'hello' > 'h','e','l','l','o'
// 函数function fn(...data){} > data: [] //fn()传入多少个参数,data数组里就有多少个
// ...语法返回的是浅拷贝的数据。
console.log([...[1,2,3], '4', ...'hello', 6]);

// 逗号运算符(,)
let x = (2, 'sb');
console.log(x); // 'sb'

// 幂(**)运算符返回第一个操作数取第二个操作数的幂的结果。它等价于 Math.pow()
console.log(2**3); // 8

// 条件(三元)运算符
console.log('' ? "问号前为true返回这个" : "否则返回这个");

// 自减 -- : 前缀式 --x ; 后缀式 x--
// let a = 10;
// let b = a--; // 操作数会减一,然后返回减一之前的值
// console.log(a, b); // 9 10
// let b = --a; // 操作数会减一,然后返回减一之后的值。
// console.log(a, b); // 9 9

// delete 运算符用于删除对象的一个属性
// let a = {name:'sb'}
// console.log(delete a.name,delete a.name11);// 一般不用在意返回值,在意的自己看文档;
// console.log(a.name);

表达式:

这部分先随便写写了,也不好整理成文章。仅当作自己的学习记录。

javascript 复制代码
// async function 关键字可用于定义表达式中的异步函数。
async function fn1() {}

// function* 关键字可用于在表达式中定义一个生成器函数。 generator 函数
// async function* 关键字可用于在表达式中定义一个异步生成器函数。
async function* foo() {
  yield await 1;
  yield await 2;
  yield await 3;
}
console.log(Object.prototype.toString.call(foo));
let str = 0;
async function generate() {
  for await (const val of foo()) {
    str = str + val;
  }
  console.log(str);
}
generate();
let sb = foo()
console.log(sb.next().then(res=>{console.log(res.value);}));
console.log(sb.next().then(res=>{console.log(res.value);}));
console.log(sb.next().then(res=>{console.log(res.value);}));
// yield 关键字用于暂停和恢复生成器函数。
// yield* 表达式用于委托给另一个 generator 或可迭代对象。
相关推荐
知识分享小能手2 分钟前
uni-app 入门学习教程,从入门到精通,uni-app 基础知识详解 (2)
前端·javascript·windows·学习·微信小程序·小程序·uni-app
文心快码BaiduComate10 分钟前
限时集福!Comate挂件/皮肤上线,符(福)气掉落中~
前端·后端·程序员
勇敢di牛牛10 分钟前
vue3 + mars3D 三分钟画一个地球
前端·vue.js
IT_陈寒1 小时前
Python+AI实战:用LangChain构建智能问答系统的5个核心技巧
前端·人工智能·后端
袁煦丞1 小时前
MoneyPrinterTurbo一键生成短视频:cpolar内网穿透实验室第644个成功挑战
前端·程序员·远程工作
代码小学僧1 小时前
让 AI 真正帮你开发:前端 MCP 实用技巧分享
前端
晴殇i2 小时前
前端鉴权新时代:告别 localStorage,拥抱更安全的 JWT 存储方案
前端·javascript·面试
Json____2 小时前
使用node Express 框架框架开发一个前后端分离的二手交易平台项目。
java·前端·express
since �2 小时前
前端转Java,从0到1学习教程
java·前端·学习
码农刚子2 小时前
ASP.NET Core Blazor简介和快速入门 二(组件基础)
javascript·后端