JS -- 数据类型转换及相关
1、任何类型转string:①(推荐)在需要转换的类型加上空字符串,例 1 + "" , "" + null等(单双引号均可)。 ②在需要转换的类型后加点tostring,例 var n = 1 n.tostring( ) , var a = true a.tostring( )。 ③在需要转换的类型后放在String( )里,例 windows.String(1) ,windows.String(null)等。 (注:方法②在转换null和undefined时会报错;3种方法在转换object时会显示[object Object])
2、任何类型转boolean:①把需要转换的类型放在Boolean( )里,例 Boolean(1) , Boolean(undefined)等。 ②(推荐)在需要转换的类型前加两个感叹号,例 !! 1 ,!! { }等。(注:下面5种转为布尔为false。null undefined 0 NaN ""(''))
3、任何类型转number:①把需要转换的类型放在Number( )里,例 Number( '1' )等。 ②把需要转换的类型放在parseInt( )里,例 parseInt( '1' , 10 ) ,parseInt( '011' , 8 )等 。 ③把需要转换的类型放在parseFloat( )里,例 parseFloat( '1.23' )等小数型。 ④(推荐)把需要转换的类型减零,例 ' 3 ' - 0 ,' 20 ' - 0 等。 ⑤把需要转换的类型前面加一个加号,例 + ' 2 ' , + ' 12 ' 等。
内存图
简单数据类型的值存放在栈(stack)中;复杂数据类型的值存放在堆(heap)中,然后在栈中放入对应的地址(引用)。
示例:
a = 1 a = {name : " a "} a.name = ' b ' a = {name : ' a '}垃圾回收
如果一个对象没有被引用,会被当做垃圾,将被回收。
(IE浏览器BUG:当heap中几个对象相互引用,而没有stack引用时,IE不把它们当做垃圾)
浅拷贝和深拷贝
基本类型的赋值都是深拷贝;一个对象改变里面元素导致另一对象也跟着变就是浅拷贝。
深拷贝思考题
fn不是垃圾 a.x 和 a = { n : 2 }的地址引用不一样