美文网首页
JavaScript 内存图 对象

JavaScript 内存图 对象

作者: Qingelin | 来源:发表于2019-08-09 00:03 被阅读0次

1、类型转换:


1.1、其他类型转为数字  

(1)、使用正常的函数(API):Number() 

(2)、使用全局函数(API)转为整数:parseInt(转换的数据,转化的进制)       记住、必考

parseInt()

        1、parseInt() ,括号里面必须写要转化的进制,0-32 内任何数字都可以。

        2、parse意思是解析,在数据中从左开始能parse多少就parse多少。

        3、parseInt()方法只能把数字组成的字符串转换为相应的数字,其它类型的都会转为NaN.

(3)、使用全局函数(API)转为浮点数:parseFloat(数据)

parseFloat() ,括号里面只写要转化的数据就行,浮点数只能转为10进制。

(4)、特殊方法 1:任何数据 - 0(常用)

这个方法既能转换为整数,也能转换为浮点数。最后结果以原数据类型为准。

(5)、特殊方法 2:取真,+ 其他类型数据



1.2、其他类型转为字符串

(1)、使用正常的函数(API):toString()

xxx.toString()

注:1、没有写symbol类型的转换。

        2、从图中可以知道该方法 对 null / undefined 类型转换之后会报错。

        3、object对象转换以后变成 "[object Object]"  。其它类型都是变量值外部加引号。

(2)、与空字符串相加方法:

                xxx + ' '   ——   变量 + 空字符串就可以啦,原理:如果加号 ‘+’ 左右任意一边有字符串,它就优先尝试把其他类型的变量转换为字符串。

xxx + ' '方法

注:1、没有写symbol类型的转换。

        2、从图中可以知道该方法 对 null / undefined 类型也适用。

        3、object对象转换以后变成 "[object Object]"  。其它类型都是变量值外部加引号。

        4、该方法相比 toString()方法,简捷,使用范围广。建议使用该方法。

        5、原则上 js 中不同数据类型之间不能相加,但是由于 加号 ‘ + ’ 的不同环境中的不同运算功能,会出现下面情况:

        var num = 1;

        num + ' 1'

        // " 11 "

上面代码块的执行原理:加号会优先把数值num = 1 转换为字符串 ' 1 ',再相加,结果为 " 11 "  .

(3)、全局函数方法:window.String()方法

window.String()方法

    注:1、没有写symbol类型的转换。

            2、从图中可以知道该方法 对 null / undefined 类型也适用。

            3、object对象转换以后变成 "[object Object]"  。其它类型都是变量值外部加引号。

            4、该方法与第二种方法的功能一样。


1.3、其他类型转为布尔值

所有的数据类型都可以变成布尔值。

从其他类型数据的转换为布尔值时只有以下四个 falsy 值,其他的都是true;(falsy值就是在布尔值上下文中认定可以转化为false的值)

1、number类型(2个): 0、NaN  结果为false;

2、字符串:'' 空字符串结果为false;

3、null 结果为false;

4、undefined  结果为false;

(1)、全局函数Boolean()

Boolean()方法

    注:1、数字只要不是 0 ,转为布尔值后都是 true ;

            2、只有空字符串才会返回false,其他(包括空字符串)都是false;

            3、null   和 undefined都会返回fasle;

            4、对象类型(包括空对象、函数、所有的数组)都会返回true;

(2)、!!后加数据类型 (常用方法)

!!+数据类型

注:得到的结果和Boolean()方法一样。



2、内存图:

内存和外存的区别:

内存必须通电,一旦断电,里面的东西全部失去,外存不会这样。内存输入输出速度快,外存慢,最快的SSD外存接近内存的速度,不容易坏,但贵而且一旦坏了就再也用不了整个都读不了,一般的外存是机械硬盘,但是容易坏10年左右,但是坏掉了还能用,只要不读那一部分就行。

所有涉及到类型为对象的数据都可以用内存图来形象的表示!

内存:

内存图

存储对象的关于内存的几种情况:

对象运行例子 垃圾回收 IE解决bug

普通对象和复杂对象的主要区别:

1、简单数据类型的数据在js执行时直接在栈内存中存储。

2、而复杂的数据类型(对象)在js执行时先在Stack栈内存中存储对Heap堆内存对应的地址,然后在Heap堆内存中在很大空间中存储数据。

3、在JS中对于对象的操作叫做引用且只能是引用,没有指针的概念。

4、字符串string的存储方式不一定,可能和简单数据类型一样,也可能和对象一样。

3、深复制 && 浅拷贝:

浅拷贝——

深拷贝——

        1、所有基本(简单)类型的值涉及到赋值,只在Stack栈内存中存储,这类的赋值操作都是把内容改了,这种内容改变而不是拷贝的过程叫做深拷贝。(b变不影响类)

        2、所有对象类型数据参与,操作过程中只把Stack栈内存的地址拷贝了,没有拷贝Heap堆内存的内容,而是改变了内容,这就叫浅拷贝。(b变致a变类型)

        3、在对象类型数据之间涉及到把原来的Heap对内存中的内容修改或新开Heap对内存区的操作也叫深拷贝。

        4、浅拷贝只在涉及到数据类型为对象时才有的概念。

相关文章

网友评论

      本文标题:JavaScript 内存图 对象

      本文链接:https://www.haomeiwen.com/subject/krrtjctx.html