强制转换
强制转换主要指使用Number、String和Boolean三个函数,手动将各种类型的值,分布转换成数字、字符串或者布尔值。
1.Number()
可以将任意类型的值转化成数值。
方法: Number(x)
parseInt(x, 10)
parseFloat(x)
x - 0
+x
parseInt方法用于将字符串转为整数。
parseFloat方法用于将一个字符串转为浮点数。
2.String()
可以将任意类型的值转化成字符串
(1)原始类型值
数值:转为相应的字符串。
字符串:转换后还是原来的值。
布尔值:true转为字符串"true",false转为字符串"false"。
undefined:转为字符串"undefined"。
null:转为字符串"null"。
String(123) // "123"
String('abc') // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"
x + ' '
(2)对象
String方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。
3.Boolean()
可以将任意类型的值转为布尔值。
方法:Boolean(x)
!!x
除了以下五个值的转换结果为false,其他的值全部为true。
undefined
null
0
NaN
' '(空字符串)
普通类型与对象的区别:
数据区分为 Stack(栈内存) 和 Heap(堆内存)
简单类型的数据直接存在 Stack 里 //number/string/null/undefined/boolean
复杂类型的数据是把 Heap 地址存在 Stack 里 //object
深复制
var a = 1
var b = a
b = 2 //这个时候改变 b
a 完全不受 b 的影响
那么我们就说这是一个深复制
对于简单类型的数据来说,赋值就是深拷贝。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
浅拷贝
var a = {name: 'frank'}
var b = a
b.name = 'b'
a.name === 'b' // true
对 b 操作后,a 也变了
什么是深拷贝了,就是对 Heap 内存进行完全的拷贝。