JS 里的数据类型转换与内存图概念

2019-03-20  本文已影响0人  聪聪的执著

1、JS里面有哪些数据类型:

基本类型六种:number、string、boolean、symbol、null、undefined;
复杂类型一种:object,由基本类型组成;

1)其他类型转string

使用toString内置API进行转换:
var n=1
n.toString()  // "1"
var b=true
b.toString()  // "true"
var c=null
 c.toString()  // 无法转换,报错
var d=undefined
 d.toString()  // 无法转换,报错
var object={name:'Angel'}
object.toString() // '[object Object]'

注:console.log打印出的实际是转换的字符串,即同console.log((x).toString()),很多的地方需要的是字符串,会自动调用toString内部API进行转换;

使用+''进行转换(空字符串放前后都可以):
1+''  // "1"
true+'' // "true"
null+''  //"null"
undefined+''  // "undefined"
var object={name:'Angel'}
object+''  // '[object Object]'

注:1+'1' //"11",等价于(1).toString()+'1',不同类型相加,有字符串会优先都转为字符串进行相加,但一般是不这样使用的;

使用String全局方法进行转换:
window.String(1)  // "1"
window.String(true) // "true"
window.String(null)  //"null"
window.String(undefined) // "undefined"
window.String({})   // '[object Object]'

2)其他类型转boolean

使用Boolean进行转换:
Boolean(1)  // ture
Boolean(0)  // false
Boolean(true) // true
Boolean('')  //false,空字符串
Boolean(' ')  //true,空格字符串
Boolean(null) //false
Boolean(undefined) //false
Boolean({})   // true,只要是对象就是true
使用!!进行转换:
!!1  // ture
!!0  // false
!!true // true
!!'') //false,空字符串
!!' '  //true,空格字符串
!!null //false
!!undefined //false
!!{})  // true,只要是对象就是true

注:其它类型转boolean,只有6个值是false,分别是0NaNnullundefined''""

3)其他类型转number

例:如何将'1'→1
Number('1') //1
parseInt('1',10) //1,后面的10代表几进制
parseFloat('1') //1
 '1'-0 //1,用减0的方法
+'1' //1,用取正的方法
+'-1' //-1,用取正的方法

2、内存图概念(个人理解)

定义:变量名、函数名等存储在代码区,实际的数据内容存储在Stack栈内存和Heap堆内存区,故内存图包含代码区、Stack区、Heap区,基本数据一般都存储在Stack区,对象数据一般存储在Heap区;

具体以下面例子说明:
var a = 1
var b = a
b = 2
a?  //  1

从内存图进行分析,可以直观看到a的值没变,还是1;

var a = {name:'a'}
var b = a
b = {name:'b'}
a.name?  // 'a'

从内存图进行分析,可以直观看到a的name属性值为'a';

var a = {name:'a'}
var b = a
b.name='b'
a.name?  // 'b'

从内存图进行分析,可以直观看到a的name属性值为'b';

var a = {name:'a'}
var b = a
b=null
a.name?  // 'a'

从内存图进行分析,可以直观看到a的name属性值为'a';

上一篇 下一篇

猜你喜欢

热点阅读