JS 里的数据类型转换

1.任意类型转字符串:

  • String()
String(1)  //"1"
String(true) //"true"
String(null)  //"null"
String(undefined) //"undefined"
  • a.toString()
(1).toString()  //"1"
true.toString()  //"true"
  • a + ''
1 + '1'  //"11"
true + ''  //"true"
null + ''  //"null"
undefined + ''  //"undefined"

2.任意类型转数字

  • Number(x)
  • parseInt(x, 10)(x为要转的字符串,第二个参数是被解析的值的进制,然后返回该值对应的十进制数)
  • parseFloat(x)
  • x - 0
  • +x

3.任意类型转布尔

  • Boolean(x)
  • !!x
    五个特殊值:0  NaN  ''  null  undefined 转boolean是false,其余为true

4.内存:

  浏览器分给页面JS的内存大概100M,分为代码区和数据区,数据区又分为栈内存(stack)和堆内存(heap),简单类型的数据(Number/String/null/undefined/Symbol/boolean)直接存在stack里,复杂数据类型(Object)是把Heap地址存在stack里面,方便数据增删操作。

5.垃圾回收:

  如果一个对象没有被引用,就会变成垃圾,浏览器就会回收这些垃圾,释放它们占用的内存,然后把这些内存重新分配给新页面或者其他需要的地方使用。
  IE6在页面关闭时该回收的垃圾没有被及时回收,直到整个浏览器关闭再回收,就会造成内存泄漏。解决方法是在页面关闭时手动把没有被引用的函数设为null
例如:

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

6.深拷贝:

var a = 1;
var b = a;
b = 2;
console.log(a);  //1
console.log(b);  //2

深拷贝就是无论b怎样变化a的值都不会受到b的影响,对于简单数据类型,赋值就是深拷贝

7.复杂数据类型的浅拷贝:b改变导致a受到影响跟着改变

var a = {name: 'xiaoming'}
var b = a
b.name = 'xiaohong'
a.name === 'xiaohong' // true

复杂数据类型的深拷贝:对Heap内存完全拷贝

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

推荐阅读更多精彩内容