首页 > 试题广场 >

执行以下程序,下列选项中,说法正确的是() var s1 =

[单选题]

执行以下程序,下列选项中,说法正确的是()

var s1 = Symbol('a');
var s2 = Symbol('a');
var s3 = Symbol.for('b');
var s4 = Symbol.for('b');
console.log(typeof s1); ...①
console.log(s1==s2); ...②
console.log(s3==s4); ...③

  • ①式输出结果为Object

  • ②式输出结果为false

  • ③式输出结果为false

  • 创建Symbol空对象,可以使用new Symbol()或者Symbol()

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(s1==s2); ...②
//symbol类型每个都是独一无二的
console.log(s3==s4); ...③
//s3,s4的key都是b,都找到同一个symbol,true

加上BigInt的话,JS目前共有八种数据类型

基本数据类型七种:(string,number,boolean,null,undefined, es6后新增symbol bigint)

引用数据类型: 一种 (object) 包含array,function,Date,RegExp..等引用类型

发表于 2021-12-10 13:55:37 回复(9)
D不对,因为:

Symbol类型属于ES6中新增的基本数据类型之一,内部没有construtor构造器,不能使用new关键字创建
所以new Symbol()的时候会报错: Symbol is not a constructor
编辑于 2022-01-04 12:53:55 回复(0)