JavaScript 中“众所周知”的符号

2024-01-31 19:56:44 浏览数 (1)

这里所提到的 符号并不是直接在 JavaScript 中使用的有效语法或标识符。它们实际上是 JavaScript 中的内部 Symbol,用于实现某些功能,比如迭代、instanceOf 等。它们用于内部操作,可能会在将来被移除或修改。

举例来说:你可以设置 @@isConcatSpreadable 来阻止 .concat 方法展开数组。

代码语言:javascript复制
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 循环中被内部使用来定义迭代。

代码语言:javascript复制
const customIterable = {
    [Symbol.iterator]() {
        return {
            next() {
                // 无限循环
                return { value: 'anything', done: false }
                // 完成时返回 {done: true}
            }
        }
    }
}

for (const item of customIterable) {
    console.log(item);
}

@@match 也可能有潜在的用途:

代码语言:javascript复制
class CustomDateMatcher {
    [Symbol.match](str) {
        // ...逻辑...
    }
}

const str = '21st of March';
console.log(str.match(new CustomDateMatcher('21/03'))); // 自定义模式匹配

这些内部 Symbol 提供了一种机制,允许你自定义对象或类在与内建 JavaScript 方法交互时的行为,但它们通常用于高级或特定的用例,并且在普通的 JavaScript 编程中很少直接使用。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

0 人点赞