JS中的类型

Base64转ASCII

当我有一个地址但我又不想一些不是很懂的人知道,那我就转为Base64码

let encodedData = window.btoa("www.guolei.com"); // 编码
let decodedData = window.atob(encodedData); // 解码
"www.guolei.com"

在JS中有7种数据类型,JS中所有的数据都来自于这七种类型分别是 String Number Boolean Undefined Null  Object

String

一般变为String的类型是这样 a.toString 但老司机一般会这样

1 + ‘’

于空字符串相加

Boolean

同样 Boolean()这样还不如 !! 字符

!! 0

以及我们需要背诵的falsy值

NaN 0 ‘’ undefined null 五种

Number

转为number的五种方法

Number('1')

parseInt('1',10) 这里必须要写进制不然就会出现错误 比如parseInt('010')

parseFloat('1.23')

或直接 -0 在JS中有一个运算规则 任何东西 - 都要转变为 Number 才开始运算就像 + 会把所有数据都变成字符一样

内存图

简单类型会被存入 stack中 而 复杂类型会被存入 Heap堆内存中

而复杂类型比如 一个objec的数据t存入内存中的流程

var a = 1
var b = {
   name: 'franl',
   age: 18  
}
// 变量提升,以64存入内存中
首先 a = 1会被存入stack中,而b就会在stack中留下一个地址这个地址引用到heap堆内存中的一个哈希表

  • 简单 stack
  • 复杂 存地址到stack,存入入heap地址到heak中
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=?

上述所有的题都要画内存图来解

著名的面试题

var a = {n:3}
var b =a
a.x = a = {n:2}
//在赋值前就以及a.x确定了内存地址
alert(a.x); ???
alert(b.x); ???

画内存图哦

垃圾回收

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

var a ={name:'a'}
var b ={name:'b'}
a=b
// 在这里 name:'a'这个哈希表就变成垃圾

垃圾回收的面试题

var fn = function(){}
  document.body.onclick = fn
  fn =null
  
// function会不会被回收

这道题的精华依然是画内存图

深拷贝和浅拷贝

var a = 1

var b=a

b=2

b=1

在这里b的改变不会影响到a的值所以我们说它是深拷贝,基本类型中赋值全部都是深拷贝但没有什么意思

我们专注的是复杂类型的深拷贝

var a ={name ='a'}
var b = a
b.name = a
// 那在这里a.name的值当然也是浅拷贝

所以我们专注的是如何实现复杂类型的深拷贝

 

posted on 2019-02-21 18:06  城外三石  阅读(148)  评论(0)    收藏  举报

导航