gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:30:28 28 4
gpt4 key购买 nike

以下情况:

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() ] 解决方案
没有名字,只有描述:
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],
),
);
输出:
1. Symbol Description:  isMoving:  true
2. Symbol Description: currentStatus: moving

最佳答案

您遇到问题的原因是 Javascript 符号完全没有“名称”。
符号实际上没有名字
当您将符号分配给变量时,不是 给符号一个名称,紧随其后。
例如,考虑以下代码:

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

var gamma = getMeASymbol()
在函数内部,我们创建一个符号并将其存储在 alpha .
然后我们将相同的符号存储在 beta .
最后,我们返回符号,调用者将其存储在 gamma 中。 .
这三个变量名都没有真正附加到符号上。
更重要的是, alphabeta到时候甚至都不存在了 gamma被安排了。
符号确实有描述
如果您在创建符号时传入描述,它将保留该字符串以供引用。
您可能会认为符号的“名称”,尽管这些“名称”不一定是唯一的。
后面可以看到符号的 .toString()的返回值里面的描述方法。
console.log(Symbol('mySymbol').toString()) // prints "Symbol(mySymbol)"
如果你只想得到原始描述,你可以去掉多余的东西:
console.log(Symbol('mySymbol').toString().slice(7,-1))
更新符号现在有 .description 您可以使用属性而不是调用 toString并去掉多余的字符。
console.log(Symbol('mySymbol').description)
结论
  • 变量有名称。
  • 变量将指向一个值。
  • 符号是一种值(value)。
  • 但是一个值并不指向包含它的任何变量。
  • 所以你不能从一个值中得到一个变量名。
  • 但是,如果您想在调试时查看一些有用的东西,请提供符号描述。
  • 关于javascript - 如何获取符号名称(文字)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48189471/

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