美文网首页
2019-03-16 普通类型和对象的区别

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

作者: 追夢的蚂蚁 | 来源:发表于2019-03-16 22:59 被阅读0次

任意类型转字符串

  1. String(x)


    image.png
  2. x.toString()
    var n = null
    n.toString()
    报错'toString' of null,没有这个api
1+ '1' = (1).toString() + '1' ="11"
  1. x+''


    x+ ''

任意类型转数字

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

任意类型转布尔

  1. Boolean(x)
  2. !!x
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 是什么?
过程一 过程二 过程三 过程四

一道面试题

image.png

GC 垃圾回收

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

回收垃圾
var fn = function(){} //undefined
document.body.onclick = fn//f (){}
fn = null // null
function会被回收吗?no

浅拷贝VS深拷贝

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

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

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

b变致a变就是浅拷贝

浅拷贝

相关文章

网友评论

      本文标题:2019-03-16 普通类型和对象的区别

      本文链接:https://www.haomeiwen.com/subject/rrzjmqtx.html