js 数据类型转换和内存图

2019-01-16  本文已影响0人  simon_李玉兵

转成字符串

  1. 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]"

nullundefined都报错

  1. + ''
1 + '' // "1"
true + '' // "true"
null + '' // "null"
undefined + '' // "undefined"
var obj = {name: 'a'}
obj + '' // "[object Object]"
  1. 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

  1. Boolean
Boolean(1) // true
Boolean(0) // false
Boolean(null) // false
Boolean(undefined) // false
Boolean({}) // true
Boolean('') //false
  1. !!
!!1 // true
!!0 //false

5个falsy值。falsy表示他们是假的,但是不是假false
0 NaN '' unll undefined

转成number

  1. Number
  2. parseInt()
  3. parseFloat()
  4. - 0
  5. + 取正
+ '21' // 21

内存图

电脑开机的时候,操作系统从硬盘读取到内存。操作系统占用一定的内存,电脑打开浏览器会占用内存。浏览器把分到的内存容量分给每个页面。页面运行的js也会分配一定的内存。js再把内存分代码区数据区。数据区又分成stack(栈)heap(堆)

当执行
var a = 1
var b = a
var c = true
var d = {name: 'a'}
时浏览器做了什么

解析图1.png

关于内存的题目

题1.png
题2.png
题3.png
题4.png

循环引用

循环引用.png

一个面试题


面试题.png

a.x = a = {n: 2} a的只一开始就确定了。为地址34。

垃圾回收

如果一个对象没有被引用,它就是垃圾,将被回收。


垃圾回收1.png

一个问题

image.png

此时高亮的function是否是垃圾


image.png

很明显不是。有document引用它

上图中,当我们关掉页面时。document直接就不存在了。但是内部的三个还存在引用关系。在ie中存在一个bug,会认为这三个对象不是垃圾。

上一篇 下一篇

猜你喜欢

热点阅读