思考:浏览器/计算机是如何管理各种数据类型值得?
所有的数据类型值,在计算机底层,都是以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 错误
浙公网安备 33010602011771号