这里所提到的 符号并不是直接在 JavaScript 中使用的有效语法或标识符。它们实际上是 JavaScript 中的内部 Symbol,用于实现某些功能,比如迭代、instanceOf 等。它们用于内部操作,可能会在将来被移除或修改。
举例来说:你可以设置 @@isConcatSpreadable
来阻止 .concat
方法展开数组。
const customArray = [1, 2, 3];
customArray[Symbol.isConcatSpreadable] = false;
const concatenatedArray = [4, 5, 6].concat(customArray);
console.log(concatenatedArray); // 输出: [4, 5, 6, [1, 2, 3]]
另一个例子是更实用的 @@iterator
,它在 for 循环中被内部使用来定义迭代。
const customIterable = {
[Symbol.iterator]() {
return {
next() {
// 无限循环
return { value: 'anything', done: false }
// 完成时返回 {done: true}
}
}
}
}
for (const item of customIterable) {
console.log(item);
}
@@match
也可能有潜在的用途:
class CustomDateMatcher {
[Symbol.match](str) {
// ...逻辑...
}
}
const str = '21st of March';
console.log(str.match(new CustomDateMatcher('21/03'))); // 自定义模式匹配
这些内部 Symbol 提供了一种机制,允许你自定义对象或类在与内建 JavaScript 方法交互时的行为,但它们通常用于高级或特定的用例,并且在普通的 JavaScript 编程中很少直接使用。
我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!