【问题标题】:What is the point of unicode escape sequences in identifier names in JavaScript?JavaScript 中标识符名称中的 unicode 转义序列有什么意义?
【发布时间】:2011-04-08 02:13:00
【问题描述】:

JavaScript 允许在标识符名称中使用 unicode 转义序列...例如:

var \u0160imeVidas = "blah";

上述变量以(克罗地亚)字母Š开头,因此变量的完整名称是“ŠimeVidas”。 现在,这很整洁,但有什么意义呢? 是否有任何场景可以使用此功能?

【问题讨论】:

  • 有趣,我是在 Chrome 中完成的,但它破坏了 console.dir(window)
  • 好点,@TimTheTinker。因为它是window['ŠimeVidas'],所以一个名为ŠimeVidas 的变量是可能的。
  • 破产了?你的意思是?我运行了 console.dir(window) 并且 ŠimeVidas 变量被列为属性...它是列表中倒数第二个(最后一个是 __proto__)
  • @Šime:这很奇怪,全局对象根本不会展开让我看到任何属性 - Chrome 5.0.375.127。
  • 我今天更新到 6.0.472.53。难道这就是LOL的原因吗?

标签: javascript unicode escaping identifier


【解决方案1】:

我能想到的在声明变量时使用 unicode 转义序列的唯一用途是用于混淆。当然,您可以为同一个变量键入以下内容:

var ŠimeVidas = "blah";

现在,如果您要使用字符串中的随机字符替换为 unicode 转义序列来引用此变量,则搜索和查找这些引用将变得更加困难。当然,与大多数其他混淆技术一样,它很容易可逆。

如果您想使用未映射到 Alt+Num 组合的 unicode 字符,则可以节省在charmap(或您的操作系统等效项)中搜索键码的时间。不过,对于节省字节来说并不是很好。

【讨论】:

    【解决方案2】:

    假设您有一个以 UTF-8 存储的库,并且作者选择在 API 中使用非 ASCII 字符。然后,假设出于某种原因,您需要从以 ASCII 格式存储的文件中访问该库。允许标识符中的 Unicode 转义序列允许您这样做。可能还有其他这样的场景,但这只是一个例子。

    【讨论】:

      猜你喜欢
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2020-04-25
      • 2017-10-14
      • 2017-04-27
      • 1970-01-01
      • 2021-01-30
      相关资源
      最近更新 更多