JS大数处理

421 阅读2分钟

概述

  • 本文主要讲解JS的一些重要的基础知识,可能不会对你开发效率有大幅提升,但可以对你JS这块知识增砖添瓦
  • JS中对于大数该如何处理,可以用MDN最新发布的基础类型得以解决
  • JS中变量作用域如何理解

基础类型

  • 最新的MDN出了8中数据类型,其中7中原始数据类型,和可变数据类型(Object)
    • 原始数据类型值不可变,可变数据类型的地址空间是引用地址,所以可以更改。
    • 函数、数组的本质实际上也是Object类型
    • 在JS中,变量的定义实质就是在获得计算机内存中的一块地址空间,在这个地址空间中存储数据。
    • 原始数据赋值实际是开辟一块新的地址空间,可变数据类型赋值实际是给的内存地址,只要修改一处,所有是该内存地址的变量都都会修改
        let a = 10;
        let b = a;
        a = 11;
        console.log(b) // 10
        
        --------修改可变数据--obj和copyObj变量的地址空间相同--
        let obj = {a: 10};
        let copyObj = obj
        obj.a = 11;
        console.log(copyObj.a) // 11 
    
  • BigInt类型处理JS大数场景
    • BigInt类型不能与数字类型相互转换,否则报错
    • BigInt类型的数据能也能进行加减乘除运算
    • 使用BigInt类型处理JS大数
        const bigNum = 46546484789798746848498489n;
        const num = bigNum * 5n;
        console.log(num) // 232732423948993734242492445n
    
        const str = String(num);
        const result = str.substring(0, str.length);
        console.log(result) // 232732423948993734242492445
    
    

变量作用域和常见运算的坑

  • 变量作用域分全局变量局部变量,粗略的理解可以是在函数内部定义的变量叫局部变量,其他的位置定义的都是全局变量
  • 虽然全局变量可以被全局访问到,但也要如何定义变量,var、let、 const 定义的变量会有不同含义;其中涉及到变量提升、临时性死区、常量等含义,具体见文档
       function func () {
           // 函数内部的叫局部变量
           let a = 10
           var b = 20
       }
       console.log(a) // 报错
       console.log(b) // 报错
       
       
       if(ture) {
           // 全局变量
           var a = 10;
           let b = 20
       }
       console.log(a) // 10
       console.log(b) // 报错