思考:浏览器/计算机是如何管理各种数据类型值得?

所有的数据类型值,在计算机底层,都是以2进制存储的

@1常用的进制  

    +   2  进制:0 、 1

    +   8  进制:0 ~7

    +   10进制 :0~9 (我们平时写代码,写出来的值都是10进制的)

    +   16进制 :0~9   A~F

    +...

     如果我们写值是以“0x”开头的,浏览器认为其是16进制,默认帮我们转换为10进制进行处理,如果写的值是以“0”开始的,浏览器认为其是8进制,也帮我们默认转换为10进制,剩余写的值,都是按照10进制算的,但是不论咋样,计算机最后都是按照2进制存储的

@2 js 使用number类型表示数字(整数和浮点数),遵循IEEE-754标准 通过64位二进制值来表示一个数字

第0位:符号位,0表示正数,1表示负数 s

第1位到第11位【11位指数】:存储指数部分 E

第12位到63位 【52位尾数】:储存小数部分(即有效数字)F

注:尾数部分在规约形式下第一位默认为1(省略不写)

  @3  十进制(decimal)

        二进制(binary)

       + [ Number ].toString( [ radix ] )  :把一个十进制数字转换为[ radix ] 进制的字符串,如果不写 [ radix ] 默认是10进制

      + 整数 / 小数

      + 最大安全数字 [ 16位 ]   &Bigint

      + 计算精度问题 :0.1+0.2 = ?

   十进制   转   二进制  (分两种情况:一种是整数  一种是浮点数(小数))

@1整数

转换方法:用十进制的值一直除以2,直到商为0结束,把每一次取到的余数,从末尾到开始串起来即可

var n = 123;
console.log(n.toString(2));  //‘ 1111011’
console.log(n.toString(8));  //‘173’

@ 2 浮点数

转换方法:用十进制浮点数乘以2,每一次去整数部分,把剩下的小数部分继续乘以2...直到乘积是1,没有小数为止.....{很多时候会出现无限循环下去} ->但是计算机存储最长64位超出部分被干掉了,也就是计算机底层存储的浮点数的二进制值,不一定是准确的,有可能是省略后的结果.....

var n = 0.1;
        console.log(n.toString(2)); //'0.0001100110011001100110011001100110011001100110011001101'

console.log(0.1+0.2 == 0.3); //false
        console.log(0.1+0.2)//0.30000000000000004
        console.log((0.1*10) + (0.2*10))/10; //0.3

@4 js检测数据类型方案

+ typeof

    + 返回结果首先是一个字符串,其次字符串中包含了对应的数据类型

    + 原理:按照二进制值检测{ 000:对象   1:整数     010:浮点数     100:字符串    110:布尔    undefined:-2^30    null: 全是零 }

    +检测性能高

    + typeof  null ->  'object'

    +typeof   不能细分对象

    + typeof  函数  ->'function'  [可以调用call 方法,可执行]

    + instanceof

    + constructor

    + object.prototype.toString.call([ value ])

    .....

    + Array.isArray   检测是否为一个数组

    + ...... 

//标准特殊对象 (数组)

//  var   arr = [ 10,20,30,'bozi',true ] ;

// 特殊:以数字(字符串)作为属性,从零开始逐级递增{数字代表的是当前第几项 0-> 第一项   1-> 第二项......我们这个代表位置的数字属性称之为“索引”}  ‘索引从零开始递增’

//还有一个内置的属性length存储当前数组的长度

//  var  time = new Date();

// var reg = /^[ + - ] ? (\d|([0-9]\d+))(\.\+)?$/;

// var err = new SyntaxaError();

//SyntaxError   语法错误

//ReferenceError  引用错误

//TypeError  类型错误

//Error  错误

/* // 可执行/调用对象「实现了call或者能调用call方法」  函数 function
function sum(x, y) {
    return x + y;
}
sum(10, 20); */

 

posted on 2021-04-09 19:59  张波子  阅读(114)  评论(0)    收藏  举报