转成字符串
- toString
var n = 1
n.toString() // "1"
var n = true
n.toString() // "true"
var n = null
n.toString() // 报错 Cannot read property 'toString' of null
var n = undefined
n.toString() // 报错 Cannot read property 'toString' of undefined
var n = {name: 'a'}
n.toString() // "[object Object]"
null
和undefined
都报错
- + ''
1 + '' // "1"
true + '' // "true"
null + '' // "null"
undefined + '' // "undefined"
var obj = {name: 'a'}
obj + '' // "[object Object]"
- String()
var n = 1
window.String(n) // "1"
var n = true
String(n) // "true"
var n = null
String(n) // "null"
var n = undefined
String(n) // "undefined"
var n = {name: 'a'}
String(n) // "[object Object]"
转成Boolean
- Boolean
Boolean(1) // true
Boolean(0) // false
Boolean(null) // false
Boolean(undefined) // false
Boolean({}) // true
Boolean('') //false
- !!
!!1 // true
!!0 //false
5个falsy值。falsy表示他们是假的,但是不是假false
0
NaN
''
unll
undefined
转成number
- Number
- parseInt()
- parseFloat()
- - 0
- + 取正
+ '21' // 21
内存图
电脑开机的时候,操作系统从硬盘读取到内存。操作系统占用一定的内存,电脑打开浏览器会占用内存。浏览器把分到的内存容量分给每个页面。页面运行的js也会分配一定的内存。js再把内存分代码区和数据区。数据区又分成stack(栈)和heap(堆)
解析图1.png当执行
var a = 1
var b = a
var c = true
var d = {name: 'a'}
时浏览器做了什么
关于内存的题目
循环引用
循环引用.png一个面试题
面试题.png
a.x = a = {n: 2}
a的只一开始就确定了。为地址34。
垃圾回收
如果一个对象没有被引用,它就是垃圾,将被回收。
垃圾回收1.png
一个问题
image.png
此时高亮的function是否是垃圾
image.png
很明显不是。有document引用它
上图中,当我们关掉页面时。document直接就不存在了。但是内部的三个还存在引用关系。在ie中存在一个bug,会认为这三个对象不是垃圾。
网友评论