小城市企业网站建设,广州哪个网站建设公司好,wordpress 自定义logo,河北秦皇岛建设局网站深入理解 JavaScript 中的 void 运算符和 yield* 表达式
在 JavaScript 中#xff0c;void 运算符和 yield* 表达式是两个功能独特但常被忽视的运算符。本文将详细介绍它们的用法和应用场景#xff0c;帮助您更好地理解和运用这两个运算符。
目录
void 运算符概述void 运算…深入理解 JavaScript 中的 void 运算符和 yield* 表达式
在 JavaScript 中void 运算符和 yield* 表达式是两个功能独特但常被忽视的运算符。本文将详细介绍它们的用法和应用场景帮助您更好地理解和运用这两个运算符。
目录
void 运算符概述void 运算符的用法void 运算符的应用场景yield* 表达式概述yield* 表达式的用法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 hrefjavascript: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* 不仅委托迭代也委托双向通信next、throw 和 return 方法
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* 表达式的应用场景
组合生成器将多个生成器组合在一起形成复杂的数据生成逻辑。处理嵌套迭代简化对嵌套可迭代对象的遍历。委托双向通信在生成器之间传递 next、throw 和 return。
总结
void 运算符和 yield* 表达式在 JavaScript 中提供了独特的功能。void 运算符用于执行表达式但忽略返回值常用于防止默认行为或消除返回值。yield* 表达式用于在生成器函数中委托迭代方便地组合和处理复杂的迭代逻辑。