?文章來源地址http://www.zghlxwxcb.cn/news/detail-659947.html
JS?中如何進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換?
類型轉(zhuǎn)換可以分為兩種,隱性轉(zhuǎn)換和顯性轉(zhuǎn)換
顯性轉(zhuǎn)換
主要分為三大類:數(shù)值類型、字符串類型、布爾類型
三大類的原始類型值的轉(zhuǎn)換規(guī)則我就不一一列舉了
數(shù)值類型(引用類型轉(zhuǎn)換)
Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5
第一步,調(diào)用對(duì)象自身的`valueOf`方法。如果返回原始類型的值,則直接對(duì)該值使用`Number`函數(shù),不再進(jìn)行后續(xù)步驟。
第二步,如果`valueOf`方法返回的還是對(duì)象,則改為調(diào)用對(duì)象自身的`toString`方法。如果`toString`方法返回原始類型的值,
則對(duì)該值使用`Number`函數(shù),不再進(jìn)行后續(xù)步驟。
第三步,如果`toString`方法返回的是對(duì)象,就報(bào)錯(cuò)。
補(bǔ)充一點(diǎn):`valueOf`和`toString`方法,都是可以自定義的
復(fù)制代碼
字符串類型(引用類型轉(zhuǎn)換)
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
`String`方法背后的轉(zhuǎn)換規(guī)則,與`Number`方法基本相同,只是互換了`valueOf`方法和`toString`方法的執(zhí)行順序。
復(fù)制代碼
隱性轉(zhuǎn)換
類型 | 轉(zhuǎn)換前 | 轉(zhuǎn)換后 |
---|---|---|
number | 4 | 4 |
string | "1" | 1 |
string | "" | 0 |
boolean | true | 1 |
boolean | false | 0 |
undefined | undefined | NaN |
null | null | 0 |
閉包
閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù) ———— 《JavaScript高級(jí)程序設(shè)計(jì)》
-
閉包用途:
- 能夠訪問函數(shù)定義時(shí)所在的詞法作用域(阻止其被回收)
- 私有變量化
- 模擬塊級(jí)作用域
- 創(chuàng)建模塊
-
閉包缺點(diǎn):閉包調(diào)用函數(shù)的變量,并且這個(gè)變量在函數(shù)執(zhí)行完之后,不能釋放,會(huì)導(dǎo)致函數(shù)的變量一直保存在內(nèi)存中,過多的閉包可能會(huì)導(dǎo)致內(nèi)存泄漏。
-
解決:變量設(shè)置成null
原型和原型鏈
原型
- 每個(gè)對(duì)象都有一個(gè) proto 屬性,該屬性指向自己的原型對(duì)象
- 每個(gè)構(gòu)造函數(shù)都有一個(gè)?prototype?屬性,該屬性指向?qū)嵗龑?duì)象的原型對(duì)象
- 原型對(duì)象里的?constructor?指向構(gòu)造函數(shù)本身
原型鏈
當(dāng)試圖訪問一個(gè)對(duì)象的屬性時(shí),它不僅僅在該對(duì)象上搜尋,還會(huì)搜尋該對(duì)象的原型,以及該對(duì)象的原型的原型,依次層層向上搜索,直到找到一個(gè)名字匹配的屬性或到達(dá)原型鏈的末尾null
?
文章來源:http://www.zghlxwxcb.cn/news/detail-659947.html
?
到了這里,關(guān)于常見前端基礎(chǔ)面試題(HTML,CSS,JS)(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!