【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 或可迭代对象。
相关推荐
霸王蟹1 分钟前
React 19中如何向Vue那样自定义状态和方法暴露给父组件。
前端·javascript·学习·react.js·typescript
小野猫子11 分钟前
Web GIS可视化地图框架Leaflet、OpenLayers、Mapbox、Cesium、ArcGis for JavaScript
前端·webgl·可视化3d地图
shenyan~21 分钟前
关于 js:9. Node.js 后端相关
前端·javascript·node.js
uwvwko37 分钟前
ctfshow——web入门254~258
android·前端·web·ctf·反序列化
所待.3831 小时前
深入解析SpringMVC:从入门到精通
前端·spring·mvc
逃逸线LOF1 小时前
CSS之精灵图(雪碧图)Sprites、字体图标
前端·css
进取星辰2 小时前
31、魔法生物图鉴——React 19 Web Workers
开发语言·javascript·ecmascript
海天胜景2 小时前
jqGrid冻结列错行问题,将冻结表格(悬浮表格)与 正常表格进行高度同步
前端
清风细雨_林木木3 小时前
解决 Tailwind CSS 代码冗余问题
前端·css
HSunR3 小时前
vue3 elementplus tabs切换实现
javascript·vue.js·elementui