符号在Javascript中是如何显示的?

符号在Javascript中是如何显示的?,javascript,ecmascript-6,symbols,Javascript,Ecmascript 6,Symbols,如果我说sym1=Symbol(),是符号功能的工作方式与下面的功能一样g > g = function(){ | return 2; //return some random unique value based on some internal algo | } g() > var sym1 = g(); > sym1 2 现在当我做var sym1=Symbol()时和logsym1,控制台显示Symbol(),而不是显示Symbol函数返回的值

如果我说
sym1=Symbol()
,是
符号
功能的工作方式与下面的功能一样
g

> g = function(){
|     return 2; //return some random unique value based on some internal algo
| }
    g()
> var sym1 = g();
> sym1
    2
现在当我做
var sym1=Symbol()时
和log
sym1
,控制台显示
Symbol()
,而不是显示
Symbol
函数返回的值

所以我的问题是:
符号
函数是如何工作的?键入
sym1
时,控制台如何能够显示
Symbol()
而不是某些值?我们能写出这样的函数吗

窗口['Symbol']函数的工作方式是否与函数g类似

对实际问题不确定?但是,出现“否”

当我说,>sym1控制台显示Symbol()时,这是一种混乱 而不是显示函数符号返回的值

Symbol()
不返回
函数
,而是“唯一且不可变的数据类型,可用作标识符”

符号
是唯一且不可变的数据类型,可以用作 对象属性的标识符。符号对象是隐式的 符号基元数据类型的对象包装器

var sym=Symbol(“foo”);
var obj={};
obj[sym]=1;
console.log(对象符号);//`未定义`
console.log(Object.keys(obj))/`[]`

console.log(obj[sym]);//`是的,
Symbol
只是一个函数,类似于任意的
函数g(){return something}

但是,与您问题中的示例
g
不同,它不返回数字,而是返回ES6中新的原语值类型

当我说
sym1
时,console显示
Symbol()
,而不是显示函数Symbol返回的值

您认为返回的值是什么?您认为它应该如何显示

g
函数返回的数字只是64位2的某个集合。在某种程度上,控制台从中派生出一个以10为基数的字符串来显示数字和您期望的数字

现在,什么是符号?它只是一个带有标识的值,我们甚至不知道它是如何实现的。目前还不清楚如何显示,或者是否会显示。这不是数字,也不是字符串。也许是某种id4

然而,ES6对此采取了预防措施,每个符号都有一个5,可以作为可选参数传递给
symbol
函数。此外,ES6还指定了符号在中应如何显示为字符串。这就是控制台通常使用的功能

这个“描述性字符串”与调用
Symbol
的外观非常相似,例如

var sym1 = Symbol("my description");
console.log(sym1.toString()); // "Symbol(my description)"
console.log(sym1); // Symbol(my description)6
var sym2 = Symbol();
console.log(sym2.toString()); // "Symbol()"
console.log(sym2); // Symbol()6
var sym1=Symbol(“我的描述”);
console.log(sym1.toString());//“符号(我的描述)”
console.log(sym1);//符号(我的描述)6
var sym2=Symbol();
console.log(sym2.toString());//“符号()”
console.log(sym2);//符号()6
1:但是,它是一个普通函数,不是构造函数,不能用
new
调用
2:加上某种类型的信息,它是一个数字,给64位一个含义
3:明确地说,控制台可能在遇到数字时使用
4:当您使用开发工具拍摄堆快照时,Chrome会为每个对象显示这样的内容,例如
5:所以是的,这比独特的身份更重要一点

6:依赖于实现,取决于您的
控制台

我说过
Symbol()
是一个函数吗?你一开始就明白我的问题了吗?我说,
Symbol
是一个函数。@overexchange“我说过Symbol()是函数吗?”“我说,>sym1控制台显示Symbol(),而不是显示函数Symbol返回的值,这是一个混乱的问题。”“你把我的问题放在原处了吗?”不完全是吗?“使用
Symbol
的目的是什么?”?要在对象内设置属性的不可变标识符,请单击“确定”。帮个忙,写一个函数
f
,这样,当你声明
var g=f()时g
时,code>console应将值显示为
f()
。当您键入
sym1
控制台显示
Symbol()
时,上面的问题就是这样。你现在明白问题了吗?@overexchange“好的,帮我一个忙,写一个函数f,这样当你声明var g=f()时;当你在控制台上键入g时,控制台应该将值显示为f()。这就是我上面问题中发生的情况”?不确定与
Symbol()
有何关联?有何关联
Symbol
是一个函数,
f
也是一个函数。这是什么
窗口['Symbol']
vs
Symbol
,这与您的问题有关系吗?您使用的是什么引擎(ES6实现)或transpiler?@Bergi我更喜欢字典表示法。所以我写了
window['Symbol']
@overexchange使用
Symbol(description)
的目的是什么?预期结果是什么?@Bergi我仍然需要了解javascript实现版本/ECMASCRIPT版本/JS引擎版本。所以我不能回答你们的问题。我认为我使用的是chrome 44版(作为初学者),重点不是doe
Symbol
函数返回什么。重点是为什么在键入
sym1
时控制台显示
Symbol()
?这怎么可能呢?@overexchange:对,我已经考虑过了:-)对于你的观点:“可能是某种id”##可以是任何东西,但它必须是函数抽象的实现方面的一部分
Symbol
,该实现部分可以由
Symbol
函数的作者随时更改(如果需要)。这就像在两个元素数组中存储一个有理数作为实现的一部分,这个实现方面可能会在以后更改为使用两种不同的数字类型来存储num&denom。是吗?一个很好的解释。但是当我们在iojs repl中执行
sym
sym.toString()
时,我们会得到Symbol()和“Symbol()”。@over