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

深入理解 JavaScript 中的 void`运算符和 yield*表达式

深入理解 JavaScript 中的 void 运算符和 yield* 表达式

在 JavaScript 中,void 运算符和 yield* 表达式是两个功能独特但常被忽视的运算符。本文将详细介绍它们的用法和应用场景,帮助您更好地理解和运用这两个运算符。

目录

  1. void 运算符概述
  2. void 运算符的用法
  3. void 运算符的应用场景
  4. yield* 表达式概述
  5. yield* 表达式的用法
  6. yield* 表达式的应用场景

void 运算符概述

void 是一个一元运算符,用于计算一个表达式但不返回结果,总是返回 undefined。其语法为:

void expression;
void (expression);

总是返回undefined

// 总是返回undefined
const res = void(0)
console.log(res) // undefined

需要注意考虑void运算符的优先级,以下加括号的表达式的例子可以帮助你清楚地理解 void 操作符的优先级:

void 2 === "2"; // (void 2) === '2',返回 false
void (2 === "2"); // void (2 === '2'),返回 undefined

void 运算符的用法

1. 阻止默认行为

在 HTML 中,可以使用 void 运算符防止链接跳转,当用户点击一个以 javascript: 开头的 URI 时,它会执行 URI 中的代码,然后用返回的值替换页面内容,除非返回的值是 undefined。void 运算符可用于返回 undefined。例如:

<a href="javascript:void(0)">Click me</a>

当用户点击链接时,由于 void(0) 返回 undefined,页面不会发生跳转。

2. 执行表达式但不返回值(箭头函数中的使用)

可以用 void 运算符执行一个表达式,但忽略其返回值,尤其当函数返回值不会被使用的到时候,使用void来保证API改变的时候不会改变箭头函数的行为:

button.onClick = () => void someFunction();

3. 立即执行函数表达式(IIFE)

在某些情况下,可以使用 void 运算符包装一个函数,使其立即执行:

void function() {console.log("This is an IIFE");
}();

void 运算符的应用场景

  • 防止页面跳转:在 <a> 标签的 href 属性中使用,避免链接导致页面刷新或跳转。
  • 书签脚本(Bookmarklets):在书签中执行 JavaScript 代码,使用 void 确保不会导航到其他页面。
  • 消除返回值:执行一个表达式,但不关心其返回值。

yield* 表达式概述

yield* 是 ES6 引入的生成器(Generator)表达式,用于委托另一个可迭代对象或生成器函数。其语法为:

yield* iterable;

yield* 表达式的用法

1. 委托可迭代对象

function* generator() {yield* [1, 2, 3];
}for (let value of generator()) {console.log(value); // 输出 1, 2, 3
}

2. 委托另一个生成器

function* innerGenerator() {yield 'a';yield 'b';
}function* outerGenerator() {yield 'start';yield* innerGenerator();yield 'end';
}for (let value of outerGenerator()) {console.log(value); // 输出 'start', 'a', 'b', 'end'
}

3. 处理双向通信

yield* 不仅委托迭代,也委托双向通信(nextthrowreturn 方法):

function* delegatingGenerator() {console.log('Delegating to another generator');const result = yield* anotherGenerator();console.log('Delegation complete');return result;
}function* anotherGenerator() {const value = yield 'yielded from anotherGenerator';return value;
}const gen = delegatingGenerator();
console.log(gen.next());        // { value: 'yielded from anotherGenerator', done: false }
console.log(gen.next('result')); // { value: undefined, done: true }

yield* 表达式的应用场景

  • 组合生成器:将多个生成器组合在一起,形成复杂的数据生成逻辑。
  • 处理嵌套迭代:简化对嵌套可迭代对象的遍历。
  • 委托双向通信:在生成器之间传递 nextthrowreturn

总结

void 运算符和 yield* 表达式在 JavaScript 中提供了独特的功能。void 运算符用于执行表达式但忽略返回值,常用于防止默认行为或消除返回值。yield* 表达式用于在生成器函数中委托迭代,方便地组合和处理复杂的迭代逻辑。

http://www.lryc.cn/news/454357.html

相关文章:

  • 第四节——从深层剖析指针(让你不再害怕指针)
  • openpnp - 吸嘴校正失败的opencv参数分析
  • 【Python】Marmir 使用指南:Python 驱动的电子表格生成器
  • 深入理解 JavaScript 事件循环机制:单线程中的异步处理核心
  • Stream流的终结方法(二)——collect
  • 【C语言系统编程】【第一部分:操作系统知识】1.1.操作系统原理
  • 基于Java+VUE+echarts大数据智能道路交通信息统计分析管理系统
  • leetcode-42. 接雨水 单调栈
  • ThinkPHP和PHP的区别
  • clientWidth,offsetWidth,scrollHeight
  • SVN版本回退
  • IDEA关联Tomcat
  • MongoDB mongoose 的 save、insert 和 create 方法的比较
  • Maven安装使用
  • 微信第三方开放平台接入本地消息事件接口报错问题java.security.InvalidKeyException: Illegal key size
  • 如何只修改obsidian图片链接为markdown
  • AI不可尽信
  • [C++]使用纯opencv部署yolov11旋转框目标检测
  • Python入门--函数
  • winFrom界面无法打开
  • 【Linux】Ubuntu20.04上使用RabbitVCS的图形化SVN
  • DMA直接存储器存取
  • java计算机毕设课设—坦克大战游戏
  • Vue入门-指令学习-v-on
  • Maven的生命周期与依赖作用域介绍
  • Django学习笔记四:urls配置详解
  • NIO的callback调用方式
  • 百度文心智能体平台开发萌猫科研加油喵
  • Hive数仓操作(十六)
  • 第十二届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)(第一套)