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) 这里必须要写进制不然就会出现错误 比如
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的值当然也是浅拷贝
所以我们专注的是如何实现复杂类型的深拷贝
浙公网安备 33010602011771号