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,分别是
0
、NaN
、null
、undefined
、''
、""
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区;
具体以下面例子说明:
- 示例1
var a = 1
var b = a
b = 2
a? // 1
-
对应内存图分析
从内存图进行分析,可以直观看到a的值没变,还是1;
- 示例2
var a = {name:'a'}
var b = a
b = {name:'b'}
a.name? // 'a'
-
对应内存图分析
从内存图进行分析,可以直观看到a的name属性值为'a';
- 示例3
var a = {name:'a'}
var b = a
b.name='b'
a.name? // 'b'
-
对应内存图分析
从内存图进行分析,可以直观看到a的name属性值为'b';
- 示例4
var a = {name:'a'}
var b = a
b=null
a.name? // 'a'
-
对应内存图分析
从内存图进行分析,可以直观看到a的name属性值为'a';