Symbol是构造方法,但它不是完整的构造方法,使用Symbol来创建Symbol对象时,不使用new运算符
执行以下程序,下列选项中,说法正确的是()
A
①式输出结果为Object
B
②式输出结果为false
C
③式输出结果为false
D
创建Symbol空对象,可以使用new Symbol()或者Symbol()
正确答案:B
Symbol是ES6新增的一种基本数据类型,因此,typeof s1的结果为symbol,A选项错误;
Symbol是构造方法,但它不是完整的构造方法,使用Symbol来创建Symbol对象时,不使用new运算符,D选项错误;
Symbol(key)与Symbol.for(key)的区别在于Symbol.for(key)会在全局环境下搜索是否存在对应key的Symbol对象,如果不存在时创建该对象并添加到全局环境下,
而Symbol()不会进行该搜索,即使key值相同,创建的symbol对象也是不同的,因此②式返回结果为false,③式返回结果为true,故B选项正确,C选项错误。
Symbol为ES6新增的基本数据类型,表示独一无二的值。
Symbol()函数会返回symbol类型的值,每个从Symbol()返回的symbol值都是唯一的。
Symbol.for() 返回由给定的 key 找到的 symbol,否则就是返回新创建的 symbol
因此s1和s2是两个值都为a的不同symbol,s3创建了key为b的symbol,s4根据b找到s3的symbol,所以s1≠s2,s3==s4
var s1 = Symbol('a');
var s2 = Symbol('a');
var s3 = Symbol.for('b');//找不到key=b的symbol,新创建一个key为b的symbol
var s4 = Symbol.for('b'); //找到s3刚创建的symbol
console.log(typeof s1);...①
//typeof s1 = 'symbol' symbol为es6新增类型
console.log(s1s2); ...②
//symbol类型每个都是独一无二的
console.log(s3s4); ...③
//s3,s4的key都是b,都找到同一个symbol,true
加上BigInt的话,JS目前共有八种数据类型
基本数据类型七种:(string,number,boolean,null,undefined, es6后新增symbol bigint)
引用数据类型: 一种 (object) 包含array,function,Date,RegExp..等引用类型
Symbol类型属于ES6中新增的基本数据类型之一,内部没有construtor构造器,不能使用new关键字创建
所以new Symbol()的时候会报错: Symbol is not a constructor
__EOF__

本文链接:https://www.cnblogs.com/longmo666/p/17832393.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)