MST

星途 面试题库

面试题:JavaScript中Symbol类型的基本特性

简述JavaScript中Symbol类型的主要特性,包括但不限于它的唯一性和不可变性,并举例说明如何创建一个Symbol。
50.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

Symbol类型主要特性

  1. 唯一性
    • Symbol通过Symbol()函数创建,每次调用Symbol()都会返回一个唯一的Symbol值,即使传入相同的描述字符串。例如:
    let sym1 = Symbol('description');
    let sym2 = Symbol('description');
    console.log(sym1 === sym2); // false
    
  2. 不可变性
    • Symbol值一旦创建就不能被改变,这保证了其稳定性和安全性。例如,不能对一个Symbol值进行重新赋值改变其内部状态。
  3. 作为对象属性
    • 可以使用Symbol作为对象的属性,这样可以避免属性名冲突。因为Symbol的唯一性,不会与其他普通字符串属性名或其他Symbol属性名重复。例如:
    let mySymbol = Symbol();
    let obj = {};
    obj[mySymbol] = 'value';
    console.log(obj[mySymbol]); // 'value'
    
  4. 非字符串性
    • Symbol类型不是字符串类型,不能像字符串一样直接参与运算等操作。虽然可以通过.toString()方法转换为字符串,但它本质上与字符串不同。例如:
    let sym = Symbol('test');
    let result = sym + 'test'; // 报错,因为不能直接与字符串相加
    let strSym = sym.toString(); // "Symbol(test)"
    

创建Symbol的方式

  1. 使用Symbol()函数
    • 最基本的方式是直接调用Symbol()函数,例如:
    let sym = Symbol();
    console.log(sym); // Symbol()
    
  2. 传入描述字符串
    • 可以给Symbol()函数传入一个描述字符串,方便调试和区分不同的Symbol。例如:
    let symWithDesc = Symbol('用于表示用户ID');
    console.log(symWithDesc); // Symbol(用于表示用户ID)
    
  3. 使用Symbol.for()方法
    • Symbol.for(key)方法会在全局Symbol注册表中搜索是否有以给定key注册的Symbol,如果有则返回该Symbol,否则新建一个并注册。例如:
    let sym1 = Symbol.for('sharedSymbol');
    let sym2 = Symbol.for('sharedSymbol');
    console.log(sym1 === sym2); // true