其他类型转字符串类型
-
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类型
Number('1') === 1
-
全局函数 (parse 解析):
- 转整数:parseInt('1', 10) === 1 第一个变量是要转换的字符串,第二个变量是转换后的数字类型,比如当前是十进制
- 转小数:parseFloat('1.25') === 1.25
- '1'.
-
简洁的写法
"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’
对象也可以实现深拷贝