js 数值存储-还没完全懂

119 阅读2分钟

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>sort 排序</title>
</head>

<body>
    <script>

        var arrNum = [9, 19, 39, 49, 55, 67, 200, 299, 87, 5550]
        let sort01 = arrNum.sort()
        console.log(sort01);// [19, 200, 299, 39, 49, 55, 5550, 67, 87, 9]
        /* 
            sort() 方法默认会把数组元素转换为字符串,然后依据字符串的 Unicode 编码顺序来进行排序,并非按照数值大小排序
         字符	Unicode(十进制)	Unicode(十六进制)
                0	48	0x30
                1	49	0x31
                2	50	0x32
                3	51	0x33
                4	52	0x34
                5	53	0x35
                6	54	0x36
                7	55	0x37
                8	56	0x38
                9	57	0x39

            问题1:js 中,字符‘0’ 和数字 0 区别
                1. 数据类型不同
                字符 '0':属于字符串类型(string),由单引号或双引号包裹。
                数字 0:属于数值类型(number),代表数值零。

                2. 底层表示不同
                字符 '0':在内存中以 Unicode 编码形式存储,对应的 Unicode 值是 U+0030(十进制为 48)。
                数字 0:遵循 IEEE 754 双精度 64 位浮点数规范存储。
            问题2:‘0’ 二进制值  0 二进制值
                1. '0' Unicode 编码点:U+0030(十进制 48) -- 00000000 00110000(16 位,高位补零)
                2. 0 
                符号位(1)   指数位(11)   尾数位(52)
                0          00000000000  000000000000000000000000000000000000000000000000

                符号位:0(表示正数)
                指数位:全 0(特殊处理,表示指数为 1 - 1023 = -1022)
                尾数位:全 0(表示尾数为 0)
                
                最终值:     
                (-1)^0 × 0 × 2^(-1022) = 0

                内存占用:	'0':通常为 2 字节(UTF-16)	0 : 8 字节(64 位浮点数)
        */




        debugger

        var arr = [
            { name: 'zopp', age: 0 },
            { name: 'gpp', age: 18 },
            { name: 'yjj', age: 8 }
        ];


    </script>

</body>

</html>