第七篇博客

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

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

1)其他类型转string

使用toString内置API进行转换:

1
2
3
4
5
6
7
8
9
10
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
2
3
4
5
6
1+''  // "1"
true+'' // "true"
null+'' //"null"
undefined+'' // "undefined"
var object={name:'Angel'}
object+'' // '[object Object]'

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

使用String全局方法进行转换:

1
2
3
4
5
window.String(1)  // "1"
window.String(true) // "true"
window.String(null) //"null"
window.String(undefined) // "undefined"
window.String({}) // '[object Object]'

2)其他类型转boolean

使用Boolean进行转换:

1
2
3
4
5
6
7
8
Boolean(1)  // ture
Boolean(0) // false
Boolean(true) // true
Boolean('') //false,空字符串
Boolean(' ') //true,空格字符串
Boolean(null) //false
Boolean(undefined) //false
Boolean({}) // true,只要是对象就是true

使用!!进行转换:

1
2
3
4
5
6
7
8
!!1  // ture
!!0 // false
!!true // true
!!'') //false,空字符串
!!' ' //true,空格字符串
!!null //false
!!undefined //false
!!{}) // true,只要是对象就是true

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

###3)其他类型转number

例:如何将’1’→1

1
2
3
4
5
6
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
    1
    2
    3
    4
    var a = 1
    var b = a
    b = 2
    a? // 1
  • 对应内存图分析
    示例1

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

  • 示例2
    1
    2
    3
    4
    var a = {name:'a'}
    var b = a
    b = {name:'b'}
    a.name? // 'a'
  • 对应内存图分析
    示例2

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

  • 示例3
    1
    2
    3
    4
    var a = {name:'a'}
    var b = a
    b.name='b'
    a.name? // 'b'
  • 对应内存图分析
    示例3

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

  • 示例4
    1
    2
    3
    4
    var a = {name:'a'}
    var b = a
    b=null
    a.name? // 'a'
  • 对应内存图分析
    示例4

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