2019-03-16 普通类型和对象的区别

任意类型转字符串

  1. String(x)


    2019-03-16 普通类型和对象的区别_第1张图片
    image.png
  2. x.toString()
    var n = null
    n.toString()
    报错'toString' of null,没有这个api
1+ '1' = (1).toString() + '1' ="11"
  1. x+''


    2019-03-16 普通类型和对象的区别_第2张图片
    x+ ''

任意类型转数字

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

任意类型转布尔

  1. Boolean(x)
  2. !!x
2019-03-16 普通类型和对象的区别_第3张图片
falsy值

number(0,NaN),string(''),null,undefined,object(全是ture)


关于内存的四个题目

var a = 1
var b = a
b = 2
请问 a 显示是几?  
var a = {name: 'a'}
var b = a
b = {name: 'b'}
请问现在 a.name 是多少?
var a = {name: 'a'}
var b = a
b.name = 'b'
请问现在 a.name 是多少?
var a = {name: 'a'}
var b = a
b = null
请问现在 a 是什么?
2019-03-16 普通类型和对象的区别_第4张图片
过程一
2019-03-16 普通类型和对象的区别_第5张图片
过程二
2019-03-16 普通类型和对象的区别_第6张图片
过程三
2019-03-16 普通类型和对象的区别_第7张图片
过程四

一道面试题

2019-03-16 普通类型和对象的区别_第8张图片
image.png

GC 垃圾回收

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

2019-03-16 普通类型和对象的区别_第9张图片
回收垃圾

var fn = function(){} //undefined
document.body.onclick = fn//f (){}
fn = null // null
2019-03-16 普通类型和对象的区别_第10张图片
function会被回收吗?no

浅拷贝VS深拷贝

var a = 1
var b = a
b = 2 //这个时候改变 b
a 完全不受 b 的影响
那么我们就说这是一个深复制

b变不影响a就是深拷贝
所有数据基本类型赋值就是深拷贝
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝
什么是深拷贝,就是对 Heap 内存进行完全的拷贝。

2019-03-16 普通类型和对象的区别_第11张图片
深拷贝


var a = {
name:'a'}
var b = a
b.name = 'b'
a.name //也是'b'

b变致a变就是浅拷贝

2019-03-16 普通类型和对象的区别_第12张图片
浅拷贝

你可能感兴趣的:(2019-03-16 普通类型和对象的区别)