一、类型转换
1.转换成String
方法一:toString() 如图一:
方法二:x + '' 如图二:
方法三: window.String(x) 如图三:
对于null和undefined,用方法一会报错,用方法二、三不会报错(图四):
2.转换成Boolean
方法一:Boolean(x) 如图五:
方法二:!!x (两次取反,如图六):
另外需要记住以下五个falsey值(图七):数字0、NaN、''(空字符串)、null、undefined
3.转换成Number
方法一:Number(x) 如图八:
方法二:parseInt(x, 10) 如图九:
方法三:parseFloat(x) +x如图十:
方法四:x - 0 如图十一:
方法五:+x 如图十二:
二、内存图解
首先简单介绍一下内存和外存的区别。内存一旦断电则所有东西都消失了;外存不论是否断电东西都存着,但其运行速度较慢,目前市面上的SSD运行速度能接近内存,另外还有机械硬盘。
开机时,电脑会把外存的东西读到内存上。关于内存的分配大致如下:
操作系统开机占用 512MB
浏览器如Chrome 打开大概占用 1G 内存
浏览器各每个网页分配一定数量的内存
每个页面内存要分给页面渲染器、网络模块、浏览器外壳和 JS 引擎(V8引擎)
JS 引擎将内存分为代码区和数据区
数据区分为 Stack(栈内存) 和 Heap(堆内存)
简单类型的数据直接存在 Stack 里
复杂类型的数据是把 Heap 地址存在 Stack 里
关于内存的几个面试题:
注意遇到问题画图即可。
1.
答案:
2.
答案:
3.
答案(注意与题2对比):
4.
答案:
三、垃圾回收
若一个对象没有被引用就是垃圾,将会被回收。
正常情况下若关闭浏览器则Heap中的东西就会变成垃圾被浏览器回收,但是IE6有bug,它仍然认为这些东西不是垃圾,于是就会导致垃圾越来越多,内存不能被重新利用,导致内存泄露。
破解方法:
例:
四、关于深拷贝与浅拷贝
对于简单类型的数据来说,赋值就是深拷贝。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
浅拷贝例子:
深拷贝就是对 Heap 内存进行完全的拷贝。