JavaScript 里的数据类型转换

任意类型转字符串

  1. String(x)
  2. x.toString()
  3. x + ''

    +运算符会尝试先把两边的东西转换成相同类型(优先字符串)

任意类型转数字

  1. Number(x)
  2. parseInt(x, n)
    n表示x的进制,缺省值为10
  3. parseFloat(x)
  4. x - 0
  5. + x

任意类型转布尔

  1. Boolean(x)
  2. !! x
    JS里只有6个falsy值:0,NaN,false,''(""),null,undefined。
    对象(包括空对象{})全都是 true 。

内存图

内存分为代码区和数据区,数据区分为Stack栈内存和Heap堆内存。
简单类型存放在Stack里。
复杂类型(Object)存放在Heap里,Stack里存放对应Heap里的地址。这种关系叫引用。
画内存图理解问题实例:


实例1

实例2

实例3

实例4

实例5

实例6

GC 垃圾回收

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


此时fn不是垃圾,因为有东西在引用它

如果把页面关闭,document就不存在了,三个对象都成为了垃圾。

IE 6 的 Bug:关闭页面的时候不会把上面的对象当成垃圾,内存会一直占用,除非关闭浏览器。
解决方法:把页面所有监听的事件置为null

window.onunload = function(){
  document.body.onclick = null
}

深拷贝与浅拷贝

在上面的内存图实例1中,b变不影响a,就是深拷贝。
基本类型的赋值都是深拷贝。
在上面的内存图实例3中,b变致a变,就是浅拷贝。
对象的深拷贝需要所有的引用都是独立的,不能和原来的有交差重叠部分。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,174评论 1 32
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,793评论 8 265
  • 壹/ 您好,大叔! 夜晚的星巴克内,灯光昏暗,赵默坐在靠窗的角落,点了一杯焦糖玛奇朵,无聊的望着窗外,盼着陈曦下班...
    乌木_阅读 549评论 1 5
  • 我是一个跑业务的兼送货员,是一个为了家庭为了孩子为了小日子而努力的女人,没有多少文化,没有体面的工作,每天奔波于最...
    做自己命运的主宰阅读 200评论 0 0
  • 赶着时间,中午读完了本周阅读的课题——《世界上最疼我的那个人去了》,作者张洁。如果我没记错的话,小学的课本里...
    微语素心阅读 384评论 2 2