如何获取符号名称(文字)?

2024-05-16

以下情况:

var myVehicle = { brand: 'Tesla' };

var isMoving = Symbol();
var currentStatus = Symbol();

myVehicle[isMoving] = true;
myVehicle[currentStatus] = 'moving';

我想打印我的对象中使用的“符号属性”的名称myVehicle

console.log(
    myVehicle[isMoving],  // true
    myVehicle[currentStatus],  // 'moving',
    Reflect.ownKeys(myVehicle),  // [ 'brand', Symbol(), Symbol() ]
    Object.getOwnPropertySymbols(myVehicle), // [ Symbol(), Symbol() ]
);

我怎样才能得到这样的名字:

[isMoving, currentStatus]代替[ Symbol(), Symbol() ]

Solution

没有名字,但有描述:

var myVehicle = { brand: 'Tesla' };

var isMoving = Symbol('isMoving');
var currentStatus = Symbol('currentStatus');

myVehicle[isMoving] = true;
myVehicle[currentStatus] = 'moving';

Object.getOwnPropertySymbols(myVehicle).forEach((sym, index) =>
  console.log(
    index + 1 + '. Symbol Description: ',
    sym.description + ': ',
    myVehicle[sym],
  ),
);

Outputs:

1. Symbol Description:  isMoving:  true
2. Symbol Description:  currentStatus:  moving

你遇到问题的原因是 Javascript 符号没有确切的“名称”。

符号实际上没有名字

当您将符号分配给变量时,not给该符号一个跟随它的名称。 例如,考虑以下代码:

function getMeASymbol() {
  var alpha = Symbol()
  var beta = alpha
  return beta
}

var gamma = getMeASymbol()

在函数内部我们创建一个符号并将其存储在alpha。 然后我们将相同的符号存储在beta。 最后,我们返回符号,调用者将其存储在gamma。 这三个变量名都没有真正附加到符号上。 更重要的是,alpha and beta那时甚至不存在gamma被安排了。

符号确实有描述

如果您在创建符号时传递描述,它会保留该字符串以供参考。 您可能会认为符号的“名称”,尽管这些“名称”不一定是唯一的。 稍后,您可以看到该符号的返回值中的描述.toString() method.

console.log(Symbol('mySymbol').toString()) // prints "Symbol(mySymbol)"

如果你只想得到原始描述,你可以去掉多余的东西:

console.log(Symbol('mySymbol').toString().slice(7,-1))

update符号现在有一个.description https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description您可以使用而不是调用的属性toString并去掉多余的字符。

console.log(Symbol('mySymbol').description)

结论

  • 变量有一个名称。
  • 变量将指向一个值。
  • 符号是一种价值。
  • 但值并不指向包含它的任何变量。
  • 所以你不能从值中获取变量名。
  • 但是,如果您希望在调试时查看有用的内容,请提供符号描述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取符号名称(文字)? 的相关文章

  • 用户定义的和谐集合的对象相等性(es6)

    我遇到一个问题 我正在生成许多值 并且需要确保我只使用唯一的值 由于我使用的是带有 harmony 标志的 Node js 并且可以访问 Harmony 集合 因此我决定 Set 可能是一个选项 我正在寻找类似于以下示例的内容 use st
  • 如何从 React Navigation 获取之前的路线名称

    我正在尝试将以前的路线名称获取到当前屏幕 因为根据之前的屏幕名称 我必须在当前屏幕中显示 隐藏一些对象 为了获取以前的屏幕名称 我尝试过以下操作 componentDidMount const navigation this props i
  • 将全局样式表与故事书和角度结合使用 - SassError:SassError:预期“{”

    几天来 我一直在尝试将全局样式表集成到故事书中 我已经从 sass 支持文档中集成了 webpackFinal 配置 在 storybook 目录中 我创建了一个 scss loader scss 文件 该文件应该加载全局样式表 在 pre
  • Javascript dispatchEvent click 在 IE9 和 IE10 中不起作用

    我正在尝试在 ExtJs 中构建应用程序时模拟鼠标事件 例如单击 鼠标悬停等 我使用下面的代码来模拟点击 function triggerEvent element eventName if document createEvent var
  • jquery如何获取右、左、上、下箭头键值

    我使用了下面的代码 每当单击箭头键 左 右 上 下 时 我得到的键值为 0 任何人都可以帮忙解决这个问题吗 document keypress function e alert key value e which 如何获取 上 下 右 左
  • 如何使用 jQuery 在悬停元素旁边显示一个 div?

    假设我有severaldiv 像这样 EDIT div class ProfilePic a href img src lib css img profile pic1 png alt class ProfilePicImg a div c
  • 如何防止字段的角度自动修剪?

    有没有什么方法可以防止整个应用程序中字段的角度自动修剪 我知道我可以使用 ngTrim 指令防止指定字段出现这种情况 但将此指令添加到应用程序中的所有文本字段看起来不太好 有什么方法可以对 Angular 模块中的所有字段执行此操作吗 这是
  • 使用jquery,下拉列表选择更改时如何重定向?

    我有一个下拉列表 如果有人选择一个选项 我想根据选择重定向到另一个页面 我怎样才能通过 jquery 做到这一点 将逻辑绑定到 change 事件 并从中获取当前值 val 以确定用户应该被重定向到哪里 此示例假设位置直接存储在值本身中 m
  • 在 Angular 2+ 中进行 DOM 操作的正确方法

    我知道有一些类似的问题 但没有人回答我的问题 基本上 以角度方式操作 DOM 的正确方法是什么 比如说我有这个 html
  • 添加/更改 URL 参数并重定向到新 URL

    If the view allURL 中不存在参数 我需要将其与值一起添加到 URL 的末尾 如果它确实存在 那么我需要能够仅更改该值而不创建新的 URL 因为它之前可能有也可能没有其他参数 我找到了这个功能 但我无法让它工作 https
  • Backbone.js 和本地存储。必须指定“url”属性或函数

    我正在提高有关 Backbone js 的知识 并从教程中获取了此代码示例 http bardevblog wordpress com 2012 01 16 understanding backbone js simple example
  • Javascript 搜索并替换包含方括号的字符序列

    我正在尝试在字符串 Nationality EN ESP 中搜索 EN 我想从字符串中删除它 所以我使用替换方法 代码示例如下 var str Nationality EN ESP var find EN var regex new Reg
  • Mustache.js 只允许换行,转义其他 HTML

    我正在根据用户输入创建评论 并在用户单击 提交 后使用 Mustache js 渲染它们 我意识到我可以替换用户输入换行符 n with br 呈现为 HTML 中断 例如 myString replace n g br 我意识到我可以使用
  • Svg 点击事件无法正常工作

    我试图让我的 SVG 看起来像一个 饼形 看起来一切都很好 此外 我希望它们每个都有不同的点击事件 function one alert 1 function two alert 2 function three alert 3 funct
  • 在 for 循环中突破 Promise 块

    我有以下代码 this storeNameValidate function stores var deferred q defer console log stores for storeIndex in stores this name
  • 如何在 AngularJS 中设置选择选项中的文本格式?

    我有以下 json 对象 scope values id 2 code Code 1 name Sample 1 id 4 code Code 2 name Sample 2 id 7 code Code 3 name Sample 3 在
  • 对数滑块

    我有一个值范围从 0 到 100 的滑块 我想将它们映射到 100 到 10 000 000 的范围 我在网上看到过一些函数 但它们都是用 C 编写的 我需要它在 JavaScript 中 有任何想法吗 您可以使用这样的函数 functio
  • Django pbkdf2_sha256 JS 实现

    我有一个来自 django 的数据库 我想从 Node js 中使用它 我有一个任务 验证用户身份 从数据库可知 算法 pbkdf2 sha256 salt 10000 次迭代和 base64 编码的哈希值 我必须在 JS 中执行哪些步骤才
  • 以编程方式访问使用数据 URI 作为源的 iframe

    我正在使用 数据 URI 以编程方式创建一个 iframe 该框架加载良好 但似乎以编程方式使用 iframe 会遇到跨域安全检查 var iframeDoc document getElementById myFrame contentW
  • JSON 数据的动态表单(不同类型)

    我尝试使用 JSON 中的数据在 AngularJS 中创建动态表单 我有这个工作 HTML p p

随机推荐