ES6新增的两种基本数据类型:Symbol 与 BigInt

21 篇文章 14 订阅

Javascript自es6后一共有 7 种原始类型 和 1 种 引用类型,如下:
原始类型 number、 string 、boolean 、 undefined 、 null 、 symbol 、 bigint
引用类型 object

原始类型中的前五个就不多说了,主要说Symbol和BigInt

Symbol类型

  • 是什么
    Symbol 是一种在ES6 中新添加的数据类型,本质上是一种唯一标识符,可用作对象的唯一属性名,这样其他人就不会改写或覆盖你设置的属性值。

  • 定义方法

    let id = Symbol(‘id’);         //在创建symbol类型数据时的参数只是作为标识使用,所以不要参数也是可以的。
    
  • 特性

    1,唯一性(即使是用同一个变量生成的值也不相等)

     let id1 = Symbol('id');
     let id2 = Symbol('id');
     console.log(id1 == id2);  //false
    

    2,隐藏性(for···in,object.keys() 不能访问)

     let id = Symbol("id");
     let obj = {
      [id]:'symbol'
     };
     for(let option in obj){
         console.log(obj[option]); //空
     }
    
    

    但是也有能够访问的方法:Object.getOwnPropertySymbols

  • 常用方法

    1, Object.getOwnPropertySymbols(对象)
    返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值

     let id = Symbol("id");
     let obj = {
      [id]:'symbol'
     };
    let array = Object.getOwnPropertySymbols(obj);
     console.log(array); //[Symbol(id)]
     console.log(obj[array[0]]);  //'symbol'
    
    

    2,Symbol.for()
    全局注册并登记,使得相同参数注册的值symbol相等。

    let name1 = Symbol.for('name'); //检测到未创建后新建
     let name2 = Symbol.for('name'); //检测到已创建后返回
     console.log(name1 === name2); // true
    

    3,Symbol.keyFor()
    通过symbol对象获取到参数值

     let name1 = Symbol.for('name');
     let name2 = Symbol.for('name');
     console.log(Symbol.keyFor(name1));  // 'name'
     console.log(Symbol.keyFor(name2)); // 'name'
    

    参考链接:https://blog.csdn.net/qq_33408245/article/details/82953143

BigInt类型

  • 是什么
    BigInt数据类型提供了一种方法来表示大于2^53-1的整数。BigInt可以表示任意大的整数

  • 解决了什么问题
    Number类型只能安全的支持-9007199254740991(-(2^53-1)) 和 9007199254740991(2^53-1)之间的整数,任何超过这个范围的数值都会失去精度;而BigInt可以解决这个问题

    console.log(9007199254740999) //9007199254741000
    console.log(9007199254740993===9007199254740992) //true
    

    上图,当数值超过Number数据类型支持的安全范围值时,将会被四舍五入,从而导致精度缺失的问题

  • 如何使用

    1.在整数的末尾追加n

    console.log(9007199254740999n)//9007199254740999
    

    2.调用BigInt()构造函数

    var bigInt = BigInt("9007199254740999");      //传递给BigInt()的参数将自动转换为BigInt:
    console.log(bigInt) //9007199254740999n    
    
  • 注意事项
    1,BigInt除了不能使用一元加号运算符外,其他的运算符都可以使用

     console.log(+1n)            // Uncaught TypeError: Cannot convert a BigInt value to a number
     console.log(-1n)            //ok
    

    2,BigInt和Number之间不能进行混合操作

    console.log(1n+5)
    

作者:糖果_li 链接:https://www.jianshu.com/p/fe2c146a5d5c 来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值