1、类型转换:
1.1、其他类型转为数字
(1)、使用正常的函数(API):Number()
(2)、使用全局函数(API)转为整数: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()
注:1、没有写symbol类型的转换。
2、从图中可以知道该方法 对 null / undefined 类型转换之后会报错。
3、object对象转换以后变成 "[object Object]" 。其它类型都是变量值外部加引号。
(2)、与空字符串相加方法:
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()方法
注: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()
注:1、数字只要不是 0 ,转为布尔值后都是 true ;
2、只有空字符串才会返回false,其他(包括空字符串)都是false;
3、null 和 undefined都会返回fasle;
4、对象类型(包括空对象、函数、所有的数组)都会返回true;
(2)、!!后加数据类型 (常用方法)
注:得到的结果和Boolean()方法一样。
2、内存图:
内存和外存的区别:
内存必须通电,一旦断电,里面的东西全部失去,外存不会这样。内存输入输出速度快,外存慢,最快的SSD外存接近内存的速度,不容易坏,但贵而且一旦坏了就再也用不了整个都读不了,一般的外存是机械硬盘,但是容易坏10年左右,但是坏掉了还能用,只要不读那一部分就行。
所有涉及到类型为对象的数据都可以用内存图来形象的表示!
内存:
存储对象的关于内存的几种情况:
普通对象和复杂对象的主要区别:
1、简单数据类型的数据在js执行时直接在栈内存中存储。
2、而复杂的数据类型(对象)在js执行时先在Stack栈内存中存储对Heap堆内存对应的地址,然后在Heap堆内存中在很大空间中存储数据。
3、在JS中对于对象的操作叫做引用且只能是引用,没有指针的概念。
4、字符串string的存储方式不一定,可能和简单数据类型一样,也可能和对象一样。
3、深复制 && 浅拷贝:
浅拷贝——
深拷贝——
1、所有基本(简单)类型的值涉及到赋值,只在Stack栈内存中存储,这类的赋值操作都是把内容改了,这种内容改变而不是拷贝的过程叫做深拷贝。(b变不影响类)
2、所有对象类型数据参与,操作过程中只把Stack栈内存的地址拷贝了,没有拷贝Heap堆内存的内容,而是改变了内容,这就叫浅拷贝。(b变致a变类型)
3、在对象类型数据之间涉及到把原来的Heap对内存中的内容修改或新开Heap对内存区的操作也叫深拷贝。
4、浅拷贝只在涉及到数据类型为对象时才有的概念。