js类型转换

2019-01-10  本文已影响0人  夜景阑姗

目录 :字符类型转换
数字类型转换
布尔类型转换
堆栈
垃圾回收
深拷贝浅拷贝
任意类型转字符串
1,String(x)


image.png

2,x.toString() null undefined object这二个类型中没有toString()方法调用报错
object 转换不能得到 key value 结果不是我们要的


image.png

3,x + ''


image.png

任意类型转数字

  1. Number(x)
  2. parseInt(x, 10) MDN
parseInt(011)  //11 遇到0跳过
parseInt('s')   //不能解析 返回NAN
parseInt('12x') //解析到12 X不能解析 返回12

  1. parseFloat(x) MDN
  2. x - 0 任意字符串-0 '1' - 0 //1
  3. +x
    任意类型转布尔
    Boolean(x)
    !!x
    类型转换布尔5个false 0 NAN unll undefined ''(空字符串)
    内存图
  4. 你买一个 8G 的内存条
  5. 操作系统开机即占用 512MB
  6. Chrome 打开即占用 1G 内存
  7. Chrome 各每个网页分配一定数量的内存
  8. 这些内存要分给页面渲染器、网络模块、浏览器外壳和 JS 引擎(V8引擎)
  9. JS 引擎将内存分为代码区和数据区
  10. 我们只研究数据区
  11. 数据区分为 Stack(栈内存) 和 Heap(堆内存)
  12. 简单类型的数据直接存在 Stack 里
  13. 复杂类型的数据是把 Heap 地址存在 Stack 里
    面试题
var a = 1
var b = a
b = 2
请问 a 显示是几?   //1  a和b存了2个栈地址不干扰

var a = {name: 'a'}
var b = a
b = {name: 'b'} //等于号是赋值  新开地址 看下图
请问现在 a.name 是多少?

var a = {name: 'a'}
var b = a
b.name = 'b'   b调用了a.name方法指向堆内存
请问现在 a.name 是多少?

var a = {name: 'a'}
var b = a
b = null
请问现在 a 是什么?
image.png
image.png
image.png

垃圾回收 机制
goole
深复制是什么鬼

var a = 1
var b = a
b = 2 //这个时候改变 b
a 完全不受 b 的影响
那么我们就说这是一个深复制
对于简单类型的数据来说,赋值就是深拷贝。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
这是一个浅拷贝的例子
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 === 'a' // true
上一篇下一篇

猜你喜欢

热点阅读