JavaScript 是一种动态类型语言,变量没有类型限制,可以随时赋予任意值。
1数据类型的转换
1.1Number()
使用Number
函数,可以将任何类型的值转化为数值。
1 | Number(123) // 123 |
使用parseInt()函数,可以将值转化为整数值,使用parseFloat()函数,可以将值转化为浮点数。
1 | parseInt('12.3') //12 |
在实际使用中,很多选择这种方式进行转换
1 | '123' - 0 //123 |
1.2Boolean()
Boolean函数的转换规则相对简单,除以下五个值转换结果为false
,其他都为true
。
undefined
null
-0 或+0
NaN
‘ ‘ (空字符串)
所有对象,包括空对象的转换结果都是true
。
1.3String()
String
函数可以将任意类型的值转化成字符串,转换规则如下。
数值:转为相应的字符串。
字符串:转换后还是原来的值。
布尔值:true转为字符串”true”,false转为字符串”false”。
undefined:转为字符串”undefined”。
null:转为字符串”null”。
1 | String({a: 1}) // "[object Object]" |
number.toString()
函数可以使用不同进制把一个数字转换为字符串。
1 | 15.toString() //15,默认将数字15转为十进制后输出字符串 |
在实际使用中,可以+''
来时实现转换。
1 | 123 + '' //'123' |
2各数据类型的内存存储
内存数据区存储分为Stack栈内存和Heap堆内存。
简单类型的值储存在Stack栈内存里,数字以64位储存,字符串以16位储存。
复杂类型将值存储在Heap堆内存,在Stack栈内存上记录其Heap堆内存地址。
####2.1浅拷贝和深拷贝
对于简单类型的数据来说,赋值就是深拷贝。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。深拷贝是对 Heap 内存进行完全的拷贝。
下面有几道常见面试题,在解答时只需要画出简略内存图就可以明知答案。
1 | // 一 |
参考文献: