在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换。
1, 显式数据类型转换
a:转数字:
1)Number转换:
代码:
var
a = “123”;
a = Number(a);
注意:
a) 如果转换的内容本身就是一个数值类型的字符串,那么将来在转换的时候会返回自己。
b) 如果转换的内容本身不是一个数值类型的字符串,那么在转换的时候结果是NaN.
c) 如果要转换的内容是空的字符串,那以转换的结果是0.
d) 如果是其它的字符,那么将来在转换的时候结果是NaN.
2)parseInt():
代码:
var a = “123”; a = parseInt(a);
a) 忽略字符串前面的空格,直至找到第一个非空字符,还会将数字后面的非数字的字符串去掉。
b) 如果第一个字符不是数字符号或者负号,返回NaN
c) 会将小数取整。(向下取整)
3)parseFloat();//浮点数(小数)
与parseInt一样,唯一区别是parseFloat可以保留小数。
b.转字符串
可以将其它的数据类型转成字符串。
1)String():
代码:
var
a = 123;
a = String(a);
2)toString()的方法来进行转换(包装类)。
代码:
var
a = 123; a = a.toString();
undefined,``null``不能用toString。
c.转boolean类型:
可以将其它类型转为boolean值:
Boolean():
代码:
var a =”true”; a = Boolean(a);
注意:在进行boolean转换的时候所有的内容在转换以后结果都是true,除了:false、""(空字符串)、0、NaN、undefined
2,隐式转换
a) 转number:
var a = “123”;
a = +a;
加减乘除以及最余都可以让字符串隐式转换成number.
b) 转string:
var a = 123;
a = a + “”;
c) 转boolean:
var a = 123;
a = !!a;
普通类型和对象(复杂类型)的区别
对于普通类型的数据来说,赋值就是深拷贝。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
基本数据类型(primitive)的引用和引用所指的对象都存储在栈(stack)中,
而复杂类型(object)的引用存储在栈(stack)中,他所指的对象存储在堆(heap)中。
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
//这是一个浅拷贝,因为a也变了
深拷贝就是对 Heap 内存进行完全的拷贝。