摘要:是一個(gè)雙目運(yùn)算符內(nèi)部實(shí)現(xiàn)機(jī)制是通過原型鏈來判斷能自定義行為的東西三類型轉(zhuǎn)換轉(zhuǎn)除了其他所有值都轉(zhuǎn)為包括所有對(duì)象對(duì)象轉(zhuǎn)原始類型對(duì)象在轉(zhuǎn)換類型的時(shí)候,會(huì)調(diào)用內(nèi)置的函數(shù)該方法在轉(zhuǎn)原始類型時(shí)調(diào)用優(yōu)先級(jí)最高。
JS基礎(chǔ)知識(shí)
(一)JS中原始類型
(1)原始值有六種:boolean,null,undefined,number,string,symbol
(2)原始類型存儲(chǔ)的都是值,沒有函數(shù)可以調(diào)用,能夠函數(shù)調(diào)用是因?yàn)檫M(jìn)行了強(qiáng)制類型轉(zhuǎn)換,轉(zhuǎn)換成對(duì)象類型
(3)number類型為浮點(diǎn)型類型 eg:0.1+0.2!=0.3 string類型是不可變 string類型調(diào)用任何方法,不會(huì)改變其值
(二)JS對(duì)象類型
原始類型和對(duì)象類型的區(qū)別?
原始類型存儲(chǔ)值,對(duì)象類型存儲(chǔ)地址(指針)
(1)函數(shù)參數(shù)是對(duì)象的情況?
函數(shù)傳參是傳遞對(duì)象指針的副本
(2)typeof vs instanceof
typeof是否能正確判斷類型?instanceof正確判斷對(duì)象的原理?
typeof對(duì)原始類型除了null都可以判斷出類型 對(duì)象類型除了function 其他全顯示object typeof是一個(gè)一元運(yùn)算符
function本質(zhì)上也是一個(gè)對(duì)象,但是function對(duì)象與普通對(duì)象相比,其內(nèi)部有一個(gè)[[Call]]方法,用來表示這個(gè)對(duì)象是可調(diào)用的,typeof操作
符在判斷Object時(shí),如果內(nèi)部實(shí)現(xiàn)了[[Call]]方法,就返回function。
instanceof是一個(gè)雙目運(yùn)算符 內(nèi)部實(shí)現(xiàn)機(jī)制是通過原型鏈來判斷 Symbol.hasInstance能自定義instanceof行為的東西
(三)類型轉(zhuǎn)換
(1)轉(zhuǎn)Boolean
除了undefined null false NaN "" 0 -0 其他所有值都轉(zhuǎn)為true 包括所有對(duì)象
(2)對(duì)象轉(zhuǎn)原始類型
對(duì)象在轉(zhuǎn)換類型的時(shí)候,會(huì)調(diào)用內(nèi)置的 [[ToPrimitive]] 函數(shù) 該方法在轉(zhuǎn)原始類型時(shí)調(diào)用優(yōu)先級(jí)最高。
let a = { valueOf() { return 0 }, toString() { return "1" }, [Symbol.toPrimitive]() { return 2 } } 1 + a // => 3
(3)四則運(yùn)算符
加法運(yùn)算符的特點(diǎn):
運(yùn)算中其中一方為字符串,那么就會(huì)把另一方也轉(zhuǎn)換為字符串(優(yōu)先轉(zhuǎn)化成字符串)
如果一方不是字符串或者數(shù)字,那么會(huì)將它轉(zhuǎn)換為數(shù)字或者字符串(布爾值轉(zhuǎn)化為數(shù)字 其他優(yōu)先字符串)
除了加法運(yùn)算符,其他運(yùn)算符只要其中一方是數(shù)字,那么另一方就會(huì)被轉(zhuǎn)為數(shù)字
比較運(yùn)算符
如果是對(duì)象,就通過toPrimitive轉(zhuǎn)換為對(duì)象
如果是字符串,就通過unicode字符索引來比較
(四)this
如何正確判斷this?箭頭函數(shù)的this是什么?
this指向哪里的優(yōu)先級(jí)規(guī)則:new>bind>obj.foo()>foo() 箭頭函數(shù)一旦被綁定,就不會(huì)再被任何方式所改變
(五)== vs ===
== vs === 有什么區(qū)別?
==:如果類型不同,會(huì)進(jìn)行類型轉(zhuǎn)換
判斷一方是boolean會(huì)轉(zhuǎn)化成number 再進(jìn)行比較 可能會(huì)繼續(xù)類型轉(zhuǎn)換
判斷一方是object且另一方為string、number、symbol會(huì)把object轉(zhuǎn)為原始類型再進(jìn)行判斷
(六)閉包
什么是閉包?內(nèi)部函數(shù)可以訪問外部函數(shù)的變量
循環(huán)中使用閉包解決‘var’定義函數(shù)的問題
for (var i = 1; i <= 5; i++) { setTimeout(function timer() { console.log(i) }, i * 1000) }
setTimeout是個(gè)異步函數(shù),會(huì)把循環(huán)全部執(zhí)行完畢,i 就是6
解決辦法一
for (var i = 1; i <= 5; i++) { (function(j) { setTimeout(function timer() { console.log(j) }, j * 1000) })(i) }
使用了立即執(zhí)行函數(shù)將 i 傳入函數(shù)內(nèi)部,這個(gè)時(shí)候值就被固定在了參數(shù) j 上面不會(huì)改變,當(dāng)下次執(zhí)行 timer 這個(gè)閉包的時(shí)候,就可以使用外部函數(shù)的變量 j(執(zhí)行上下文 作用域鏈 優(yōu)先尋找最近的)
解決辦法二
for (var i = 1; i <= 5; i++) { setTimeout( function timer(j) { console.log(j) }, i * 1000, i ) }
使用 setTimeout 的第三個(gè)參數(shù),這個(gè)參數(shù)會(huì)被當(dāng)成 timer 函數(shù)的參數(shù)傳入
解決辦法三
for (let i = 1; i <= 5; i++) { setTimeout(function timer() { console.log(i) }, i * 1000) }
使用 let 定義 i 了來解決問題了
(七)深淺拷貝
什么是淺拷貝?如何實(shí)現(xiàn)淺拷貝?什么是深拷貝?如何實(shí)現(xiàn)深拷貝?
Object.assign淺拷貝 只會(huì)拷貝所有的屬性值到新的對(duì)象中,如果屬性值是對(duì)象,拷貝的是地址
通過展開運(yùn)算符...同樣實(shí)現(xiàn)淺拷貝
淺拷貝只解決第一層的問題
深拷貝:通過JSON.parse(JSON.stringify(object))
局限性:會(huì)忽略u(píng)ndefined,symbol,不能序列化函數(shù),不能解決循環(huán)引用的對(duì)象
lodash實(shí)現(xiàn)深拷貝
(八)原型
如何理解原型?如何理解原型鏈?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/53768.html
摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對(duì)于一個(gè)光禿禿的元素,方法返回對(duì)象中屬性值如果有就是據(jù)我測(cè)試不同環(huán)境結(jié)果可能有差異而就是。 花了很長(zhǎng)時(shí)間整理的前端面試資源,喜歡請(qǐng)大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...
摘要:然而這次的文章,就像賀師俊所說的這篇文章是從程序員這個(gè)老年度總結(jié)前端掘金年對(duì)我來說,是重要的一年。博客導(dǎo)讀總結(jié)個(gè)人感悟掘金此文著筆之時(shí),已經(jīng)在眼前了。今天,我就來整理一篇,我個(gè)人認(rèn)為的年對(duì)開發(fā)有年終總結(jié)掘金又到 2016 Top 10 Android Library - 掘金 過去的 2016 年,開源社區(qū)異常活躍,很多個(gè)人與公司爭(zhēng)相開源自己的項(xiàng)目,讓人眼花繚亂,然而有些項(xiàng)目只是曇花一...
摘要:前言月份開始出沒社區(qū),現(xiàn)在差不多月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議那么今天我就把看過的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區(qū),現(xiàn)在差不多9月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議!那么今天我就...
摘要:引剛開始大學(xué)生活不久后,我邂逅了前端,它闖入我的生活是那么迅速猛烈,在不知不覺中也已一年。此文僅對(duì)于自己做出反思與總結(jié),若為向往前端的小白君提供了燃料,不勝榮幸。我正式進(jìn)入了前端疲勞。 引: 剛開始大學(xué)生活不久后,我邂逅了前端,它闖入我的生活是那么迅速、猛烈,在不知不覺中也已一年。此文僅對(duì)于自己做出反思與總結(jié),若為向往前端的小白君提供了燃料,不勝榮幸。 初試 在剛剛接觸到前端時(shí),是對(duì)于...
摘要:代表公司去參加今年的第二屆前端開發(fā)者年度大會(huì),散會(huì)的時(shí)候,技術(shù)老大問我,今天感覺怎么樣,有什么收獲,當(dāng)時(shí)就零零碎碎的回答了一些,不算完美趁著還記得點(diǎn)什么,在這里做個(gè)自我回顧總結(jié),謹(jǐn)代表個(gè)人見解,有不當(dāng)之處,或若涉及圖片隱私或者其它問題,煩請(qǐng) 代表公司去參加今年的 第二屆前端開發(fā)者年度大會(huì),散會(huì)的時(shí)候,Team 技術(shù)老大問我,今天感覺怎么樣,有什么收獲,當(dāng)時(shí)就零零碎碎的回答了一些,不算完...
閱讀 2618·2021-11-12 10:36
閱讀 2257·2021-08-23 09:47
閱讀 1675·2019-08-30 15:44
閱讀 1400·2019-08-30 14:10
閱讀 2241·2019-08-29 16:52
閱讀 2333·2019-08-29 16:40
閱讀 1581·2019-08-29 16:17
閱讀 2406·2019-08-26 13:21