数据类型转换

其他类型转字符串类型

  • toString方法:

    • number 转字符串:var n = 1; n.toString() // 输出字符串 "1"

    • boolean 转字符串:var a = true; a.toString() // 输出字符串 "true"

    • null 无法通过 toString 转字符串,会报错。

    • undefined 同样无法通过 toString 转字符串,会报错。

    • object 转字符串:不论object中是什么转字符串都会变成 "[object Object]"

  • String( )方法:String(1) //把数字1转为字符串1

  • 更便捷的方法:

    在需要转换的数值类型后面或前面加一个空字符串 (与上面不同,可以转换 null 与 undefined 类型):

    1 + ''
    '1'
    
    '' + null
    "null"
    
    '' + undefined
    'undefined'
    

    原理:如果在 + 号的左右任意一边有字符串,那它就会尝试把另一边也转换为字符串相加

其他类型转布尔类型

Boolean(1)
true
Boolean(2)
true
Boolean(0)
false
Boolean('')
false
Boolean(' ')
true
Boolean('嘤嘤嘤')
true
Boolean(null)
false
Boolean(undefined)
false

Boolean({})
true
Boolean({name : 'name'})
true

简便写法:

!! true
true
!! 1
true
!! 0
false
... //与上面的方法结果相同

五个特殊值

  • number中只有 0 NaN 转为布尔为false

  • 字符串中只有 空字符串 '' 转为布尔为false

  • null undefined 转布尔类型都是 false

  • object 转布尔类型都是 true

详细了解,搜索:MDN Falsy

转number类型

  1. Number('1') === 1

  2. 全局函数 (parse 解析):

    • 转整数:parseInt('1', 10) === 1 第一个变量是要转换的字符串,第二个变量是转换后的数字类型,比如当前是十进制
    • 转小数:parseFloat('1.25') === 1.25
    • '1'.
  3. 简洁的写法

    "1" - 0
    1
    "10" - 0
    10
    "1.25" - 0
    1.25
    
    + "1"
    1
    + "10"
    10
    + "1.25"
    1.25
    + "-1"
    -1
    

案例

循环a.self.self....

正确写法:

var a = {}
a.self = a
a.self.self.self
{self : {...}}

错误写法:

var a = {self : a}
{self : undefined} //由于 a 在 var 时对象 a 中的 a 还不存在,所以 self 的值会变为 undefined

引用类型面试题

var a = {n:1}
var b = a
a.x = a = {n:2} //此处会先确定a的值是什么,再进行赋值运算

alert(a.x) // undefined
alert(b.x) // [object Object]

GC 垃圾回收 (一个页面被使用后,浏览器回收的那个 页面的内存)

  • 如果一个对象没有被引用,它就是垃圾,将被回收。

  • IE6 有bug 它无法将 document.onclick 的事件回收

深拷贝 浅拷贝

深拷贝

对于所有的基本类型,简单的赋值,就是深拷贝

var a = 1
var b = a
b = 2
// a = 1 ,b 的更改并没有影响 a,这就叫做深拷贝

浅拷贝

对象类型

var a = {
    name : 'x'
}
var b = a
b.name = 'y'
// 此时 a.name 也是 ‘y’

对象也可以实现深拷贝

你可能感兴趣的:(数据类型转换)