扫码关注公众号
JavaScript Symbol 类型是什么,怎么用?
根据规范,对象的属性键只能是字符串类型或者Symbol类型。不是Number,也不是Boolean,只有字符串或Symbol这两种类型。(1)Symbol不会被自动转换为字符串:JavaScript中的大多数值都支持字符串的隐式转换。例如,我们可以alert任何值,都可以生效。Symbol比较特殊,它不会被自动转换。(2)“隐藏”属性:Symbol允许我们创建对象的“隐藏”属性,代码的任何其他部分都不能意外访问或重写这些属性。(3)字面量中的Symbol:如果我们要在对象字面量{...}中使用Symbol,则需要使用方括号把它括起来。(4)Symbol在for..in中会被跳过:Symbolic属性不参与for..in循环。
在字符串 "id" 上使用 Symbol("id") 有什么好处?
因为user属于另一个代码,另一个代码也使用它执行一些操作,所以我们不应该在它上面加任何字段,这样很不安全。但是Symbol不会被意外访问到,所以第三方代码看不到它,所以使用Symbol也许不会有什么问题。另外,假设另一个脚本希望在user中有自己的标识符,以实现自己的目的。这可能是另一个JavaScript库,因此脚本之间完全不了解彼此。
Symbol 的两个主要的使用场景?
1、“隐藏”对象属性。如果我们想要向“属于”另一个脚本或者库的对象添加一个属性,我们可以创建一个Symbol并使用它作为属性的键。Symbol属性不会出现在for..in中,因此它不会意外地被与其他属性一起处理。并且,它不会被直接访问,因为另一个脚本没有我们的symbol。因此,该属性将受到保护,防止被意外使用或重写。因此我们可以使用Symbol属性“秘密地”将一些东西隐藏到我们需要的对象中,但其他地方看不到它。2、JavaScript使用了许多系统Symbol,这些Symbol可以作为Symbol.*访问。我们可以使用它们来改变一些内置行为。例如,在本教程的后面部分,我们将使用Symbol.iterator来进行迭代操作,使用Symbol.toPrimitive来设置对象原始值的转换等等。