gpt4 book ai didi

javascript - 我可以依赖 ES6 `Symbol` 的字符串表示吗?

转载 作者:行者123 更新时间:2023-12-04 00:56:59 26 4
gpt4 key购买 nike

我正在开发一个通过网络发送部分数据的 ES6 应用程序。其中一部分涉及作为 ES6 Symbol 实现的标识符。例如:

const FOO = Symbol('foo');

调用 Foo.toString() 产生 Symbol(foo)。当我通过网络传递这些时,我想将其作为 foo 传递。但是,据我所知,除了使用正则表达式(具体来说,/^符号\((.*)\)$/).

我应该依赖正则表达式始终匹配吗?或者 future 对 ES6 的更新是否有可能打破这个?如果我不能依赖正则表达式匹配,那么我将通过网络将其作为 Symbol(foo) 发送。

最佳答案

根据spec它始终是 "Symbol("+ description + ")"

Symbol.prototype.toString 从对 SymbolDescriptiveString(sym) 的内部方法调用返回一个字符串:

Let desc be sym’s [[Description]] value.
If desc is undefined, let desc be the empty string.
[…]
Return the string-concatenation of "Symbol(", desc, and ")".

现在,在 2019 年更新此答案,您有两个选择:

  1. 使用(或 polyfill)Symbol.prototype.description ,即 part of ECMAScript 2019并得到所有现代 JavaScript 引擎的支持:

    const foo = Symbol("foo"),
    bar = Symbol.for("bar"),
    iter = Symbol.iterator;

    console.log(foo.description); // "foo"
    console.log(bar.description); // "bar"
    console.log(Symbol.iterator.description); // "Symbol.iterator"

  2. 或者像这样使用Symbol.prototype.toString:

    const foo = Symbol("foo"),
    bar = Symbol.for("bar"),
    iter = Symbol.iterator;

    console.log(foo.toString().slice(7, -1)); // "foo"
    console.log(bar.toString().slice(7, -1)); // "bar"
    console.log(iter.toString().slice(7, -1)); // "Symbol.iterator"

    // Or without “magic numbers”:
    console.log(foo.toString().slice("Symbol(".length, -")".length)); // "foo"
    console.log(bar.toString().slice("Symbol(".length, -")".length)); // "bar"
    console.log(iter.toString().slice("Symbol(".length, -")".length)); // "Symbol.iterator"

由于描述周围的字符串是固定的,slice 是一个很好的选择,特别是因为符号描述本身可以包含括号、换行符、字符串 "Symbol" 等,正则表达式中的 . 不会匹配换行符。

关于javascript - 我可以依赖 ES6 `Symbol` 的字符串表示吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33595946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com