JS中数据类型的转换

2018-08-12  本文已影响0人  zzyo96

数据类型转换

任意类型转String

1.String(x)


image.png

2.x.toString()

image.png

3.x+''


image.png

任意类型转Number

  1. Number(x)
  2. parseInt(x, 10) [MDN]
  3. parseFloat(x)
  4. x - 0
  5. +x

任意类型转Boolean

Boolean(x)
!!x

内存图

  1. 你买一个 8G 的内存条
  2. 操作系统开机即占用 512MB
  3. Chrome 打开即占用 1G 内存
  4. Chrome 各每个网页分配一定数量的内存
  5. 这些内存要分给页面渲染器、网络模块、浏览器外壳和 JS 引擎(V8引擎)
  6. JS 引擎将内存分为代码区和数据区
  7. 我们只研究数据区
  8. 数据区分为 Stack(栈内存) 和 Heap(堆内存)
  9. 简单类型的数据直接存在 Stack 里
  10. 复杂类型的数据是把 Heap 地址存在 Stack 里

遇到问题就画图,不要分析。

典型题目

var a = 1
var b = a
b = 2
请问 a 显示是几?  
答案:1
var a = {name: 'a'}
var b = a
b = {name: 'b'}
请问现在 a.name 是多少?
答案:'a'
var a = {name: 'a'}
var b = a
b.name = 'b'
请问现在 a.name 是多少?
答案:'b'
var a = {name: 'a'}
var b = a
b = null
请问现在 a 是什么?
答案:{name:'a'}
var a 
a={self:a}
请问现在a.self是什么?
答案:undefined
var a = {n:1};
var b = a;
a.x=a={n:2};
请问现在a.x是什么?
答案:undefined
请问b.x是什么?
[object Object]

深拷贝&浅拷贝

对于简单类型的数据来说,赋值就是深拷贝。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
这是一个浅拷贝的例子

var a = {name: 'frank'}
var b = a
b.name = 'b'
a.name === 'b' // true

因为我们对 b 操作后,a 也变了

什么是深拷贝了,就是对 Heap 内存进行完全的拷贝。
下面这个是深拷贝的例子

var a = {name: 'frank'}
var b = deepClone(a) // deepClone 还不知道怎么实现
b.name = 'b'
a.name === 'frank' // true

GC垃圾回收

如果一个对象没有被引用他就是垃圾,就要被回收


image.png

请问这里的fn是GC吗?当然不是,因为onclick在引用着它所以不能当做GC

上一篇下一篇

猜你喜欢

热点阅读