js基本理解3

数字

整数:精度准确,范围在最大安全整数范围内精度准确。Number.MAX_SAFE_INTEGER与最小安全整数Number.MIN_SAFE_INTEGER之间进度准确。
浮点数:精度丢失,由于二进制存储数据的原因。采用IEEE75标准作为转化,存在精度丢失。
注意:
0.1+0.2 == 0.3 false
0.1 + 0.3 == 0.4 true
解决方法:小数扩大10的n次幂的形式,变成整数处理,或者小数强制为小数后几位小数使用Math方法。
注意 typeof NaN 返回Number类型
原因:Number (‘ads’)返回NaN 字符串转化为数字返回NaN
相当于Number意思说:这个字符串我已经转换成一个非常的数字了,我不好表达,他就是NaN,他由我转化,所有认定他还是一个数字。

内存管理堆与栈(基础浅显理解)

栈:系统自动分配:物理内存连续分配
堆:系统动态分配:物理地址不连续 程序自行维护

<script>
        //第一类
        var a = b = 1;
        console.log("a: "+ a + 'b: '+ b);
        //第二类
        a = {n : 1};
        a.x = a = {n:2};
        console.log("a.x: " + a.x + 'a: '+ a);
        //理解
        a = {n : 1};
        b = a;
        a.x = a = {n:2};
        console.log("a.x: " + a.x + 'a: '+ a + 'b: ' + b);
    </script>

申明变量后,如是字面常量就存储在内存空间小的栈中直接存储,如是对象,数组等非字面常量,就存储在堆中,在栈中存储堆内存的地址,指向堆。

var a = b = 1;
赋值过程:从左到右,先把b值赋给a,b值待定,找b的值,b = 1;所以a等于b的值,a 等于 1;

var a = {n :1};
var b = a;
a.x = a = {n :2};
过程:
a = {n :1} :a 开辟堆 指向 {n :1};
b = a :b 指向堆 {n:1};
a.x = a :待定,因为a正等待着赋值;
a = {n:2} :a 指向堆{n:2};
然后 a赋值给a.x :a.x指向堆{n:2};
此时第一个堆{n:1}添加一个x属性保留堆{n:2}的地址指向{n;2};所以第一个堆为{n:1,x:{n:2}};
所以b为多少呢?是{n:1}吗?不是 b指向堆1 所以b为{n:1,x:{n:2}};

例 打印b值
内存管理

内存管理堆与栈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值