Symbol和BigInt的使用场景

symbol和bigInt都是JS中的两种特殊数据类型,都是ES6中提出的数据类型

symbol

       symbol是一中原始的数据类型,表示的唯一的、不可变的数据值,每一个 Symbol 值都是唯一的,这意味着每次创建一个新的 Symbol,它都是不同于其他 Symbol 的一个新值。

const sym = Symbol('mySymbol');

symbol使用场景

1、唯一的属性键盘

当你需要给对象添加属性,但又担心这些属性名可能会与其他代码中的属性名冲突的时候,可以使用symbol确保属性名的唯一性。

const mySymbol = Symbol('myUniqueKey');  
const obj = {};  
obj[mySymbol] = 'Hello, Symbol!';  
  
console.log(obj[mySymbol]); // 输出:'Hello, Symbol!'
2、私有属性

在JS中,没有像其他语言(比如JAVA)那样的内置私有属性支持,因此可以使用Symbol来模拟私有属性。通过在自己的类内部创建并引用Symbol,确保这些属性不会被外部代码访问。

const mySymbol = Symbol('myProp');
class MyClass {
    constructor(){
        this[mySymbol] = '属性值';
    }
    getMyProp() {
        return this[mySymbol];
    }

}
const getMyPropFn = new MyClass();
console.log(getMyPropFn.getMyProp());
console.log(getMyPropFn[mySymbol]);

注意:上面的代码示例并不是真正的私有属性,因为mySymbol仍然可以被外部代码访问,但如果外部代码不知道这个Symbol的引用,就无法访问该属性。

3、常量集合

可以使用Symbol防止由于拼写错误或重复定义导致的错误。

const TYPE_A = Symbol('TYPE_A');  
const TYPE_B = Symbol('TYPE_B');  
const TYPE_C = Symbol('TYPE_C');  
  
// 使用常量作为对象属性键  
const obj = {  
  [TYPE_A]: 'Value for type A',  
  [TYPE_B]: 'Value for type B',  
  // ...  
};  
  
console.log(obj[TYPE_A]); // 输出:'Value for type A'

BigInt的使用场景

由于BigInt是ES2020中引入的新特性,因此在一些较旧的浏览器或环境中可能不受支持。在使用BigInt之前,请确保目标环境支持该特性。你可以使用typeof BigInt === 'function'来检查BigInt是否可用。

1、大整数运算
2、唯一标识符
// 假设有一个生成随机大整数的函数  
function generateRandomBigInt() {  
    let result = BigInt(0);  
    const characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';  
    const charactersLength = characters.length;  
    for (let i = 0; i < 16; i++) {  
        result = (result << 5n) + BigInt(characters.charCodeAt(Math.floor(Math.random() * charactersLength)));  
    }  
    return result.toString(16); // 转换为16进制字符串  
}  
  
const uniqueId = generateRandomBigInt();  
console.log(uniqueId); // 输出类似 "27ae85e7d6f0d15b" 的随机16进制字符串
3、加密和安全

在加密和安全相关的应用中,BigInt常用于处理大整数和模幂运算等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值