我可以依靠ES6`Symbol`的字符串表示形式吗?

瑞安·肯尼迪(Ryan Kennedy)

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

const FOO = Symbol('foo');

调用Foo.toString()收益率Symbol(foo)当我通过网络传递这些信息时,我想像一样传递它foo但是,据我所知,除了使用正则表达式(特别是将其提取foo出来Symbol(foo)之外,没有其他方法可以提取/^Symbol\((.*)\)$/

我应该依靠始终匹配的正则表达式吗?还是将来对ES6的更新有可能打破这一点?如果我不能依靠正则表达式匹配,那么我将直接通过来发送它Symbol(foo)

塞巴斯蒂安·西蒙(Sebastian Simon)

根据规范,它始终为"Symbol(" + description + ")"

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

desc成为sym[[Description]]价值。
如果descundefined,则使desc为空字符串。
[…]
返回"Symbol("desc的字符串连接")"

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

  1. 使用(或polyfill)Symbol.prototype.description,这是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"等,并且.正则表达式中的例如将与换行符不匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以使用spark-csv在Apache Spark中读取以字符串形式表示的CSV吗

来自分类Dev

ES6模板文字只是将我的表达式输出为字符串吗?

来自分类Dev

可以更改`typing.TypedDict`的字符串表示形式吗?

来自分类Dev

我可以执行以字符串形式传递的lambda函数吗

来自分类Dev

ES6 符号只是一个附加了@@ 的字符串吗?

来自分类Dev

可以返回[[x:y]]形式的非字符串吗?

来自分类Dev

我可以在ES6中使用JSNice吗?

来自分类Dev

ES6模板字符串测试台

来自分类Dev

使Poedit使用ES6模板字符串?

来自分类Dev

ES6字符串模板化

来自分类Dev

访问 ES6 Set 对象中的字符串

来自分类Dev

es6变量转换为字符串

来自分类Dev

为什么 ES6 模板字符串是这样的?

来自分类Dev

ES6 字符串替换不起作用

来自分类Dev

我可以在Node中执行字符串命令吗?

来自分类Dev

我可以在Lucene查询字符串中计数(*)吗?

来自分类Dev

我可以将字符串转换为变量吗?

来自分类Dev

我可以在http查询字符串中使用“ ==”吗?

来自分类Dev

我可以在protobuf中定义常量字符串吗?

来自分类Dev

我可以从字符串中获取列名吗?

来自分类Dev

我可以使用通配符比较字符串吗?

来自分类Dev

我可以在python函数中搜索字符串吗?

来自分类Dev

Tclsh:我可以对字符串使用split吗?

来自分类Dev

我可以将字符串转换为变量吗?

来自分类Dev

我可以在字符串内使用向量吗?

来自分类Dev

我可以给空字符串加上别名吗?

来自分类Dev

我可以在格式字符串中添加变量吗?

来自分类Dev

我可以依靠无序地图的顺序吗?

来自分类Dev

我可以将重复的字符串存储在字符串数组中吗?

Related 相关文章

热门标签

归档