String()
使用String函數(shù)兜看,可以將任意類型的值轉(zhuǎn)化成字符串。
數(shù)值:轉(zhuǎn)為相應(yīng)的字符串狭瞎。
字符串:轉(zhuǎn)換后還是原來(lái)的值细移。
布爾值:true轉(zhuǎn)為"true",false轉(zhuǎn)為"false"熊锭。
undefined:轉(zhuǎn)為"undefined"弧轧。
null:轉(zhuǎn)為"null"。
String(123) // "123"
String('abc') // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"
toString,可以改變轉(zhuǎn)換成字符串時(shí)的返回值
toString可以用來(lái)轉(zhuǎn)number和boolean碗殷,null和undefined就報(bào)錯(cuò)精绎,object轉(zhuǎn)化為''[object Object]''
轉(zhuǎn)化為字符串的方式:
- String()
- .toString
- 與 ' ' 相加,
null + ' '==='null' undefined + ' ' ==='undefined'
Boolean()
使用Boolean函數(shù)锌妻,可以將任意類型的變量轉(zhuǎn)為布爾值代乃。
除了這六個(gè)值(五個(gè)falsy值和false)被轉(zhuǎn)為false,其他值都視為true仿粹。
undefined , null , false , 0 , NaN , 空字符串''
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false
Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) // true
轉(zhuǎn)化布爾值的方式:
- boolean()
- 前面加 !!
!! {} //true
!! null //false
ToString
ToString 主要負(fù)責(zé)處理非字符串類型轉(zhuǎn)換為字符串類型搁吓。我們將待轉(zhuǎn)換的類型進(jìn)行劃分:
基本類型和對(duì)象類型
string 類型是 JS 中很特殊,也是最重要的基本類型吭历,基本每個(gè)內(nèi)置對(duì)象都實(shí)現(xiàn)了自身的 toString 方法堕仔。
基本類型值的操作很常規(guī),都遵循著通用的規(guī)則晌区。
null -> 'null'
undefined -> 'undefined'
true -> 'true'
21 -> '21'
將數(shù)字轉(zhuǎn)換為字符串
全局方法 String() 可以將數(shù)字轉(zhuǎn)換為字符串摩骨。
該方法可用于任何類型的數(shù)字,字母朗若,變量恼五,表達(dá)式:
String(x) // 將變量 x 轉(zhuǎn)換為字符串并返回`
String(123) // 將數(shù)字 123 轉(zhuǎn)換為字符串并返回`
String(100 + 23) // 將數(shù)字表達(dá)式轉(zhuǎn)換為字符串并返回`
Number 方法 toString() 也是有同樣的效果。
x.toString()
(123).toString()
(100 + 23).toString()
將布爾值轉(zhuǎn)換為字符串
全局方法 String() 可以將布爾值轉(zhuǎn)換為字符串捡偏。
String(false) // 返回 "false"
String(true) // 返回 "true"
Boolean 方法 toString() 也有相同的效果唤冈。
false.toString() // 返回 "false"
true.toString() // 返回 "true"
任意類型轉(zhuǎn)數(shù)字
1. Number(x)
2. parseInt(x, 10)
3. parseFloat(x)
4. x - 0
5. +x
深復(fù)制是什么?
var a = 1
var b = a
b = 2 //這個(gè)時(shí)候改變 b
a 完全不受 b 的影響
那么我們就說(shuō)這是一個(gè)深復(fù)制
對(duì)于簡(jiǎn)單類型的數(shù)據(jù)來(lái)說(shuō),賦值就是深拷貝银伟。
對(duì)于復(fù)雜類型的數(shù)據(jù)(對(duì)象)來(lái)說(shuō)你虹,才要區(qū)分淺拷貝和深拷貝。
這是一個(gè)淺拷貝的例子
var a = {name: 'frank'}
var b = a
b.name = 'b'
a.name === 'b' // true
因?yàn)槲覀儗?duì) b 操作后彤避,a 也變了
什么是深拷貝了傅物,就是對(duì) Heap 內(nèi)存進(jìn)行完全的拷貝。
var a = {name: 'frank'}
var b = deepClone(a) // deepClone 還不知道怎么實(shí)現(xiàn)
b.name = 'b'
a.name === 'a' // true