symbol对象不能用于数据运算,包括+、-、*、/

发布时间 2023-11-15 22:43:08作者: 龙陌

执行以下程序,会抛出语法错误的式子是()

var s = Symbol('key'); ...①
console.log(s + '123'); ...②
var obj = {
    [s]:function(){console.log(1);} ...③
}
var b = Reflect.ownKeys(obj); ...④

A

B

C

D

正确答案:B

Symbol是不完整的构造函数,创建symbol对象时不需要new操作符,①式不会抛出异常,A选项不符合题意;
symbol对象不能用于数据运算,包括+、-、*、/等,②式会抛出异常,B选项符合题意;
symbol对象的唯一作用是作为对象的属性名,这样可以防止属性因重名而覆盖,使用时必须用[],③式不会抛出异常,C选项不符合题意;
使用Reflect.ownKeys()可以遍历对象的属性,包括symbol属性,④式不会抛出异常,D选项不符合题意。

Symbol 本质上是一种唯一标识符,可用作对象的唯一属性名,这样其他人就不会改写或覆盖你设置的属性值。

注意事项
Symbol值不能与其他类型的值进行运算
Symbol 值不可以和其他类型值进行混合运算,否则会报错
Symbol 值如果想要作为属性名,那就不能再用点运算符,因为点运算符后面跟的总是字符串
在对象内部使用Symbol 值作为属性名的时候,必须要将值放在方括号中

Symbol 值不能与其他类型的值进行运算,会报错。

新的API:Reflect.ownKeys() 方法可以返回所有类型的键名,包括常规键名和 Symbol 键名。