js基礎(chǔ)

遍歷

可枚舉的(enumerable:true),基本類型沒(méi)有可枚舉屬性莺治,一般來(lái)說(shuō)原型上的屬性是不可枚舉的(JSON.stringify()返回的是可枚舉屬性)
forEach 基于普通for循環(huán) 無(wú)法結(jié)合break return兄旬; 無(wú)法初始化索引鸠项;無(wú)法對(duì)數(shù)組增刪骚灸、
遍歷:

  • for...in:遍歷對(duì)象的每一個(gè)可枚舉屬性庸队,包括原型鏈上面的可枚舉屬性;
  • Object.keys():只遍歷自身的可枚舉屬性蠢正,不可以遍歷原型鏈上的可枚舉屬性骇笔;
  • hasownproperty() 返回自身的所有屬性省店,用于區(qū)分屬性是否在實(shí)例或原型上嚣崭;
  • getOwnPropertyNames():遍歷自身所有屬性(不論是否是可枚舉的),不包括原型鏈懦傍。

for in 和for of的區(qū)別:for in是遍歷的是原型和自身的可枚舉屬性雹舀,一般用于對(duì)象的遍歷,遍歷出key粗俱,有時(shí)按照索引的順序说榆,所以不用于數(shù)組的遍歷;for of用于具有迭代器屬性的對(duì)象遍歷寸认,常用于遍歷數(shù)組签财,遍歷對(duì)象的話需要結(jié)合Object.keys()

for(var key of Object.keys(student)){
    //使用Object.keys()方法獲取對(duì)象key的數(shù)組
    console.log(key+": "+student[key]);
}

JSON.parse進(jìn)行深拷貝的缺點(diǎn):通過(guò)轉(zhuǎn)化字符串進(jìn)行還原,里面的Function偏塞、undefined 空對(duì)象會(huì)丟失唱蒸,對(duì)原型的引用會(huì)丟失,對(duì)RexExp灸叼、typeError對(duì)象會(huì)返回空對(duì)象神汹;NaN庆捺、Infinity和-Infinity會(huì)變成null;對(duì)于循環(huán)引用會(huì)以$ref標(biāo)記

日期轉(zhuǎn)換

1屁魏、new Date('2020/02/02').getTime()
2滔以、new Date(1580572800000).toDateString()

字符串相關(guān)方法

indexOf() 查找 接受第二個(gè)參數(shù)為起始位置 返回出現(xiàn)的位置或-1
search() 一個(gè)參數(shù) 接受正則表達(dá)式進(jìn)行查找 但是會(huì)忽略-g全局查找 忽略lastIndex 總是從第一個(gè)開(kāi)始查找
slice() 字符串切割 負(fù)數(shù)+長(zhǎng)度處理
substring() 同上不接受負(fù)值 0處理
substr() 第二個(gè)參數(shù)為截取長(zhǎng)度 負(fù)數(shù)+長(zhǎng)度處理
String() 對(duì)于null undefined返回他們的字符串格式"null" "undefined"

js精度的問(wèn)題

js使用了IEEE754雙精度浮點(diǎn)數(shù)的規(guī)范,共有64位第一個(gè)是符號(hào)位S氓拼,中間11位M是指數(shù)位([-1074, 971])你画,最后52位E是尾數(shù)位(還有一位是隱藏位),精確整數(shù)為Math.pow(2,53)-1 超出這個(gè)范圍則會(huì)丟失精度披诗,在計(jì)算中將舍棄離結(jié)果遠(yuǎn)的撬即、同樣距離則舍棄末位為奇數(shù)的數(shù)

// 能精確表示的尾數(shù)范圍上限,S為1個(gè)0,E為11個(gè)0呈队,M為52個(gè)1

  • Math.pow(2, 53) - 1 === Number.MAX_SAFE_INTEGER // true
    // 能精確表示的尾數(shù)范圍下限,S為1個(gè)1剥槐,E為11個(gè)0,M為52個(gè)1
  • -(Math.pow(2, 53) - 1) === Number.MIN_SAFE_INTEGER // true
    // 能表示的最大數(shù)字宪摧,S為1個(gè)0粒竖,E為971,M為52個(gè)1
  • (Math.pow(2, 53) - 1) * Math.pow(2, 971) === Number.MAX_VALUE // true
    // 能表示的最接近于0的正數(shù)几于,S為1個(gè)0蕊苗,E為-1074,M為1
  • Math.pow(2, -1074) === Number.MIN_VALUE // true

二進(jìn)制移動(dòng) >>無(wú)符號(hào)右移沿彭,保留符號(hào)位朽砰;>>>有符號(hào)右移,以符號(hào)位填充補(bǔ)位喉刘,且負(fù)數(shù)在計(jì)算機(jī)中以其絕對(duì)值的二進(jìn)制的補(bǔ)碼標(biāo)示(補(bǔ)碼=反碼+1)瞧柔,所以有符號(hào)的右移將會(huì)使數(shù)字變大。

js中二進(jìn)制浮點(diǎn)數(shù)0.1+0.2 = 0.3....

js存儲(chǔ)是通過(guò)轉(zhuǎn)化為二進(jìn)制進(jìn)行處理睦裳,64 位雙精度浮點(diǎn)數(shù)的小數(shù)部分最多支持53位二進(jìn)制位造锅,由于浮點(diǎn)數(shù)的精度限制,浮點(diǎn)數(shù)小數(shù)位的限制而截?cái)嗟亩M(jìn)制數(shù)字廉邑,再轉(zhuǎn)換為十進(jìn)制哥蔚。
解決方案:Number.EPSILON可以用來(lái)設(shè)置“能夠接受的誤差范圍”。比如蛛蒙,誤差范圍設(shè)為 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2))糙箍,即如果兩個(gè)浮點(diǎn)數(shù)的差小于這個(gè)值,我們就認(rèn)為這兩個(gè)浮點(diǎn)數(shù)相等牵祟。

Number類型轉(zhuǎn)化

  • Number() 會(huì)識(shí)別基數(shù)(8進(jìn)制es5后不識(shí)別)深夯,空字符串返回0,null返回0课舍,true返回1塌西, false返回0他挎,undefined或包含非數(shù)字類型值返回NaN
  • parseInt() 會(huì)識(shí)別基數(shù),識(shí)別開(kāi)頭的數(shù)字截取捡需,忽略小數(shù)點(diǎn)办桨,空字符串或非字符串(true false null undefined)返回NaN
  • parseFloat() 無(wú)基數(shù),識(shí)別開(kāi)頭數(shù)字加一位小數(shù)點(diǎn)站辉,空字符串或非字符串返回NaN
  • +操作符跟Number轉(zhuǎn)化同理呢撞,-操作符也是 最終轉(zhuǎn)化為負(fù)值

在頁(yè)面中選中一段文字

var oBtn = document.getElementById("button");
oBtn.onclick = function() {
    var userSelection;
    if (window.getSelection) { //現(xiàn)代瀏覽器
        userSelection = window.getSelection();
    } else if (document.selection) { //IE瀏覽器 考慮到Opera,應(yīng)該放在后面
        userSelection = document.selection.createRange();
    }
    if (userSelection.getRangeAt) {
        alert(userSelection.getRangeAt(0));
    } else {
        alert("當(dāng)前瀏覽器不支持getRangeAt");
    }
};

函數(shù)

  • 函數(shù)傳參饰剥,之所以我們可以傳任意的參數(shù)而不被限制殊霞,是由于函數(shù)接受參數(shù)時(shí)是接受的arguments類數(shù)組結(jié)構(gòu),在非嚴(yán)格模式下汰蓉,命名傳參和arguments的參數(shù)會(huì)保持同步绷蹲,即使實(shí)際上他們并不是指向同一個(gè)地址;在嚴(yán)格模式下則不允許修改arguments數(shù)值顾孽,代碼將不會(huì)被執(zhí)行
  • 使用var聲明變量會(huì)被添加到最近的作用域中祝钢,這里是指函數(shù)作用域或者全局作用域,如果忘記使用var聲明若厚,則會(huì)被掛到全局拦英,每次進(jìn)入一個(gè)執(zhí)行環(huán)境就創(chuàng)建一個(gè)作用域鏈,用于查找變量和內(nèi)存回收
  • 垃圾清除:
    1测秸、標(biāo)記清除疤估,原理在于,進(jìn)入一個(gè)環(huán)境添加標(biāo)記霎冯,出環(huán)境則取消標(biāo)記铃拇,給所有內(nèi)存中的變量添加標(biāo)記,給所有在環(huán)境當(dāng)中以及被環(huán)境引用的變量翻轉(zhuǎn)標(biāo)記肃晚,剩下的則是需要被清除的變量
    2锚贱、引用計(jì)數(shù)仔戈,原理在于关串,對(duì)于引用對(duì)象,被引用一次則標(biāo)記為1监徘,又被引用標(biāo)記為2晋修,引用它的指針指向了別人則引用標(biāo)記-1,當(dāng)引用為0時(shí)意味著它無(wú)法被獲取凰盔,可以被清除墓卦,為了避免循環(huán)引用我們需要將對(duì)象置空

Number Boolean String

使用構(gòu)造函數(shù)創(chuàng)造出來(lái)的基本對(duì)象,會(huì)返回構(gòu)造出來(lái)的實(shí)例户敬,typeof為object落剪,Boolean轉(zhuǎn)化為true


image.png

數(shù)字

toFiexed() 指定小數(shù)位
toExponential()指定數(shù)字和指數(shù)位
toPercision() 指定數(shù)字位

字符串

slice() 所有負(fù)值都與length想加
substr() 第一個(gè)負(fù)值與length想加睁本,第二個(gè)負(fù)數(shù)轉(zhuǎn)為0
substring() 所有負(fù)數(shù)轉(zhuǎn)為0

屬性標(biāo)識(shí)

特性只能設(shè)置和獲取當(dāng)前實(shí)例對(duì)象,常規(guī)定義的對(duì)象屬性忠怖,初始屬性為true呢堰,可寫writable 可讀enumerable 可配置configurable,修改屬性標(biāo)識(shí)用Object.defineProperty()凡泣,使用該方法時(shí)不填寫屬性標(biāo)識(shí)默認(rèn)為false

  • configurable 不可配置 標(biāo)識(shí)不可修改讀寫 配置三個(gè)屬性枉疼,且不能修改訪問(wèn)器屬性,不可逆
let name = {age: 12}
let descriptor = Object.getOwnPropertyDescriptor(name, 'age')
descriptor // {value: 12, writable: true, enumerable: true, configurable: true}
Object.defineProperty(obj, propertyName, descriptor) 
Object.defineProperties(obj, {})  // 支持多屬性

訪問(wèn)器屬性

與普通屬性不同鞋拟,訪問(wèn)器屬性擁有g(shù)etter setter enumerable configurable 屬性標(biāo)識(shí)骂维,通過(guò)getter setter來(lái)實(shí)現(xiàn)屬性的獲取和設(shè)置,一個(gè)屬性只能為兩種屬性其一贺纲,通過(guò)訪問(wèn)器屬性可以控制航闺,其中set和get可以只設(shè)置一個(gè),未設(shè)置則無(wú)效

  • Object.keys() 獲取對(duì)象自身可枚舉屬性猴誊,不包括Symbol屬性
  • Object.ownKeys() 獲取對(duì)象自身的所有屬性来颤,包括Symbol屬性
  • Object.getOwnPropertyNames() 獲取自身的所有屬性,不包括Symbol屬性
  • Object.getOwnPropertySymbols() 獲取自身的Symbol屬性列表
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稠肘,一起剝皮案震驚了整個(gè)濱河市福铅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌项阴,老刑警劉巖滑黔,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異环揽,居然都是意外死亡略荡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門歉胶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)汛兜,“玉大人,你說(shuō)我怎么就攤上這事通今≈嗝” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵辫塌,是天一觀的道長(zhǎng)漏策。 經(jīng)常有香客問(wèn)我,道長(zhǎng)臼氨,這世上最難降的妖魔是什么掺喻? 我笑而不...
    開(kāi)封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上感耙,老公的妹妹穿的比我還像新娘褂乍。我一直安慰自己,他們只是感情好即硼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布树叽。 她就那樣靜靜地躺著,像睡著了一般谦絮。 火紅的嫁衣襯著肌膚如雪题诵。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天层皱,我揣著相機(jī)與錄音性锭,去河邊找鬼。 笑死叫胖,一個(gè)胖子當(dāng)著我的面吹牛草冈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓮增,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼怎棱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了绷跑?” 一聲冷哼從身側(cè)響起拳恋,我...
    開(kāi)封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砸捏,沒(méi)想到半個(gè)月后谬运,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體脐瑰,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骡湖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乌奇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掂骏。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡轰驳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弟灼,到底是詐尸還是另有隱情级解,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布袜爪,位于F島的核電站蠕趁,受9級(jí)特大地震影響薛闪,放射性物質(zhì)發(fā)生泄漏辛馆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昙篙。 院中可真熱鬧腊状,春花似錦、人聲如沸苔可。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)焚辅。三九已至映屋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間同蜻,已是汗流浹背棚点。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湾蔓,地道東北人瘫析。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像默责,于是被迫代替她去往敵國(guó)和親贬循。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容