摘要:作為對(duì)象原型鏈的終點(diǎn)。調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒(méi)有提供,該參數(shù)等于。它可以用于引用該函數(shù)的函數(shù)體內(nèi)當(dāng)前正在執(zhí)行的函數(shù)。
一 JS ==和===的區(qū)別一 JS
二 CSS
===叫做嚴(yán)格運(yùn)算符 ==叫做相等運(yùn)算符
嚴(yán)格運(yùn)算符比較時(shí)不僅僅比較數(shù)值還要比較數(shù)據(jù)類型是否一樣
相等運(yùn)算符在比較相同類型的數(shù)據(jù)時(shí),與嚴(yán)格相等運(yùn)算符完全一樣。 在比較不同類型的數(shù)據(jù)時(shí),相等運(yùn)算符會(huì)先將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,然后再用嚴(yán)格相等運(yùn)算符比較。
undefined == null //true undefined === null //false
ps:判斷NaN可以用Object.is()
Object.is(NaN, NaN); //trueundefined和null的區(qū)別
首先,undefined和null在if語(yǔ)句中,都會(huì)被自動(dòng)轉(zhuǎn)為false,即null==undefined結(jié)果為true
JS的基本數(shù)據(jù)類型通常 null表示"沒(méi)有對(duì)象",即該處不應(yīng)該有值,一般用法如下:
(1) 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對(duì)象。
(2) 作為對(duì)象原型鏈的終點(diǎn)。Object.getPrototypeOf(Object.prototype) // null
而 undefined表示"缺少值",就是此處應(yīng)該有一個(gè)值,但是還沒(méi)有定義,一般用法:
(1)變量被聲明了,但沒(méi)有賦值時(shí),就等于undefined。
(2) 調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒(méi)有提供,該參數(shù)等于undefined。
(3)對(duì)象沒(méi)有賦值的屬性,該屬性的值為undefined。
(4)函數(shù)沒(méi)有返回值時(shí),默認(rèn)返回undefined。
JS中typeof和instanceof用法區(qū)別JS基本數(shù)據(jù)類型有5種
String Number Boolean Null Undefined
以及引用數(shù)據(jù)類型Object(包括Array Function)
首先typeof用以獲取一個(gè)變量類型
typeof一般只能返回如下幾個(gè)結(jié)果
number boolean string function object undefined
console.log(typeof i); // undefined console.log(typeof 1); // number console.log(typeof "a"); // string console.log(typeof true); // boolean console.log(typeof function () {}); //function console.log(typeof [1, "2", true]); //object console.log(typeof { o: "hello", c: "world" }); //object console.log(typeof null); //object console.log(typeof new Number(2)); //object
以上可知用typeof無(wú)法判斷array類型 因?yàn)椴还苁菙?shù)組還是對(duì)象都會(huì)返回object
這時(shí)候就需要instanceof了
instanceof運(yùn)算符用來(lái)測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的prototype屬性 即判斷一個(gè)變量是否是某個(gè)對(duì)象的實(shí)例
var arr = [1,2,3]; alert(arr instanceof Array); // true
ps:其他判斷方法如下
①Array.isArray
Array.isArray([1, 2, 3]); // true Array.isArray({foo: 123}); // false Array.isArray("foobar"); // false Array.isArray(undefined); // false
② constructor
var arr = [1,2,3]; console.log(arr.constructor === Array); // true
③ Object.prototype.toString.call()
var arr = [1,2,3]; Object.prototype.toString.call(arr) === "[object Array]"; //trueJS用setTimeout遞歸實(shí)現(xiàn)setInterval
首先 setTimeout()和setInterval()經(jīng)常被用來(lái)處理延時(shí)和定時(shí)任務(wù) setTimeout()方法用于在指定的毫秒數(shù)后調(diào)用函數(shù)或計(jì)算表達(dá)式,而setInterval()則可以在每隔指定的毫秒數(shù)循環(huán)調(diào)用函數(shù)或表達(dá)式,直到clearInterval把它清除
//setTimeout實(shí)現(xiàn)setInterval功能 setTimeout(function(){ //do something setTimeout(arguments.callee,interval); },interval)
ps:為什么要用setTimeout實(shí)現(xiàn)setInterval?
JS中的arguments和arguments.calleearguments對(duì)象是所有(非箭頭)函數(shù)中都可用的局部變量。你可以使用arguments對(duì)象在函數(shù)中引用函數(shù)的參數(shù)
callee是 arguments 對(duì)象的一個(gè)屬性。它可以用于引用該函數(shù)的函數(shù)體內(nèi)當(dāng)前正在執(zhí)行的函數(shù)。這在函數(shù)的名稱是未知時(shí)很有用,例如在沒(méi)有名稱的函數(shù)表達(dá)式 (也稱為“匿名函數(shù)”)內(nèi)
代碼演示:
此外arguments是類數(shù)組對(duì)象 其沒(méi)有Array的一些方法 但有類似Array的一些特點(diǎn)
將函數(shù)的實(shí)際參數(shù)轉(zhuǎn)換成數(shù)組的方法如下
/** _buffer.slice(); // is equivalent to _buffer.slice(0); // also equivalent to _buffer.slice(0, _buffer.length); **/ var args = Array.prototype.slice.call(arguments)//方法一 var args = [].slice.call(arguments, 0)//方法二 //方法三: var args = []; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }JS嚴(yán)格模式("use strict")
首先是嚴(yán)格模式的用法
// 為整個(gè)script標(biāo)簽開啟嚴(yán)格模式, 需要在所有語(yǔ)句之前放一個(gè)特定語(yǔ)句 "use strict"; "use strict"; var v = "Hi! I"m a strict mode script!"; //要給某個(gè)函數(shù)開啟嚴(yán)格模式,得把 "use strict";聲明一字不漏地放在函數(shù)體所有語(yǔ)句之前 function strict(){ // 函數(shù)級(jí)別嚴(yán)格模式語(yǔ)法 "use strict"; function nested() { return "And so am I!"; } return "Hi! I"m a strict mode function! " + nested(); } function notStrict() { return "I"m not strict."; }
嚴(yán)格模式同時(shí)改變了語(yǔ)法及運(yùn)行時(shí)行為。變化通常分為這幾類:將問(wèn)題直接轉(zhuǎn)化為錯(cuò)誤(如語(yǔ)法錯(cuò)誤或運(yùn)行時(shí)錯(cuò)誤), 簡(jiǎn)化了如何為給定名稱的特定變量計(jì)算,簡(jiǎn)化了 eval 以及 arguments, 將寫"安全"JavaScript的步驟變得更簡(jiǎn)單
嚴(yán)格模式主要涉及如下幾個(gè)方面
創(chuàng)設(shè)eval作用域
禁止this關(guān)鍵字指向全局對(duì)象
禁止在函數(shù)內(nèi)部遍歷調(diào)用棧(即禁止使用arguments和callee)
對(duì)象不能有重名的屬性
函數(shù)不能有重名的參數(shù)
函數(shù)必須聲明在頂層
...
詳情 請(qǐng)移步阮一峰的 Javascript 嚴(yán)格模式詳解
JS閉包JS數(shù)組去重的簡(jiǎn)潔方法閉包Closure詳見 白話JS閉包
JS中的apply、call、bind主要是利用 ES6 set和filter方法 詳見 最近碰到的sort排序 以及 set和filter數(shù)組去重
簡(jiǎn)單總結(jié):
① apply 、 call 、bind 三者都是用來(lái)改變函數(shù)的this對(duì)象的指向的;
② apply 、 call 、bind 三者第一個(gè)參數(shù)都是this要指向的對(duì)象,也就是想指定的上下文;
③ apply 、 call 、bind 三者都可以利用后續(xù)參數(shù)傳參;
④ bind是返回對(duì)應(yīng)函數(shù),便于稍后調(diào)用;apply、call則是立即調(diào)用
⑤ call 需要把參數(shù)按順序一個(gè)個(gè)傳遞進(jìn)來(lái),而 apply 則是把參數(shù)放在數(shù)組里
詳情移步深入淺出妙用 Javascript 中 apply、call、bind
JS的 for in 和 for of簡(jiǎn)單說(shuō) for in是遍歷key 而 for of是遍歷value
let arr = ["a","b"]; for (a in arr) { console.log(a);//0,1 } for (a of arr) { console.log(a);//a,b }
ps:如何將對(duì)象的鍵名輸出數(shù)組
當(dāng)然for in配合hasOwnProperty可以過(guò)濾來(lái)著原型鏈上繼承得到的屬性
Promise的構(gòu)造函數(shù)接收一個(gè)參數(shù),是函數(shù),并且傳入兩個(gè)參數(shù):resolve,reject,分別表示異步操作執(zhí)行成功后的回調(diào)函數(shù)和異步操作執(zhí)行失敗后的回調(diào)函數(shù)。其實(shí)這里用“成功”和“失敗”來(lái)描述并不準(zhǔn)確,按照標(biāo)準(zhǔn)來(lái)講,resolve是將Promise的狀態(tài)置為fullfiled,reject是將Promise的狀態(tài)置為rejected
舉個(gè)?
ps:promise詳情請(qǐng)移步大白話講解Promise
二 CSS CSS3的box-sizingrem和em的區(qū)別1.content-box 默認(rèn)值 border和padding不計(jì)算入width之內(nèi)
2.border-box border和padding計(jì)算入width之內(nèi)
居中的幾種方法em是相對(duì)于父元素的font-size屬性值來(lái)計(jì)算的
rem是相對(duì)于html標(biāo)簽的font-size屬性值來(lái)計(jì)算的
CSS的三種基本引入方式主要是水平居中或者垂直居中
詳見web開發(fā)常用的幾種居中形式
//外部樣式表 //內(nèi)部樣式表 //內(nèi)聯(lián)CSS權(quán)重計(jì)算這是一個(gè)段落。
CSS display: none和visibility: hidden的區(qū)別內(nèi)聯(lián)樣式表的權(quán)值最高 1000
ID 選擇器的權(quán)值為 100
Class 類選擇器的權(quán)值為 10
HTML 標(biāo)簽選擇器的權(quán)值為 1
CSS的reflow和repaint①都是隱藏元素,但是前者文檔布局中不占用空間,后者仍占用空間
②display:none隱藏產(chǎn)生reflow和repaint(回流與重繪)
③前者有株連性,即父元素設(shè)置display: none后子元素不管怎樣設(shè)置都不能顯示,而后者的子元素通過(guò)設(shè)置visibility: visible后還是能顯示出來(lái)的
reflow:當(dāng)render樹的一部分或者全部因?yàn)榇笮∵吘嗟葐?wèn)題發(fā)生改變而需要重建的過(guò)程,叫做回流
repaint:當(dāng)諸如顏色背景等不會(huì)引起頁(yè)面布局變化,而只需要重新渲染的過(guò)程叫做重繪
ps:頁(yè)面的顯示過(guò)程分為以下幾個(gè)階段
1、生成DOM樹(包括display:none的節(jié)點(diǎn))
2、在DOM樹的基礎(chǔ)上根據(jù)節(jié)點(diǎn)的集合屬性(margin,padding,width,height等)生成render樹(不包括display:none head節(jié)點(diǎn),但是包括visibility:hidden的節(jié)點(diǎn))
3、在render樹的基礎(chǔ)上繼續(xù)渲染顏色背景色等樣式
reflow和repaint詳情請(qǐng)移步
未完待續(xù)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/89697.html
摘要:作為對(duì)象原型鏈的終點(diǎn)。調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒(méi)有提供,該參數(shù)等于。它可以用于引用該函數(shù)的函數(shù)體內(nèi)當(dāng)前正在執(zhí)行的函數(shù)。 一 JS 二 CSS 一 JS ==和===的區(qū)別 ===叫做嚴(yán)格運(yùn)算符 ==叫做相等運(yùn)算符嚴(yán)格運(yùn)算符比較時(shí)不僅僅比較數(shù)值還要比較數(shù)據(jù)類型是否一樣相等運(yùn)算符在比較相同類型的數(shù)據(jù)時(shí),與嚴(yán)格相等運(yùn)算符完全一樣。 在比較不同類型的數(shù)據(jù)時(shí),相等運(yùn)算符會(huì)先將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,...
摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒(méi)有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來(lái)而只能獲取元素屬性中的樣式。因此對(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:...
摘要:另外回答的時(shí)候要淡定,一些問(wèn)題就算不懂也不能慌,要和面試官談笑風(fēng)生,然后盡量扯回到自己懂的東西上面大公司比如百度給我的感覺(jué)就是很重視基礎(chǔ)思維和潛力。 —— 雖然我的offer少,但是我的拒信多啊 這幾天終于閑下來(lái),做一點(diǎn)微小的工作,整理了一些之前幾家公司的前端面試題和個(gè)人經(jīng)驗(yàn),想做前端的師弟妹可以參考,也歡迎各同行大神來(lái)指教~ (以下問(wèn)題不分先后,時(shí)間久遠(yuǎn)難免有些遺漏;很多問(wèn)題面試官都...
摘要:另外回答的時(shí)候要淡定,一些問(wèn)題就算不懂也不能慌,要和面試官談笑風(fēng)生,然后盡量扯回到自己懂的東西上面大公司比如百度給我的感覺(jué)就是很重視基礎(chǔ)思維和潛力。 —— 雖然我的offer少,但是我的拒信多啊 這幾天終于閑下來(lái),做一點(diǎn)微小的工作,整理了一些之前幾家公司的前端面試題和個(gè)人經(jīng)驗(yàn),想做前端的師弟妹可以參考,也歡迎各同行大神來(lái)指教~ (以下問(wèn)題不分先后,時(shí)間久遠(yuǎn)難免有些遺漏;很多問(wèn)題面試官都...
閱讀 1263·2021-11-23 09:51
閱讀 2638·2021-09-03 10:47
閱讀 2234·2019-08-30 15:53
閱讀 2414·2019-08-30 15:44
閱讀 1375·2019-08-30 15:44
閱讀 1194·2019-08-30 10:57
閱讀 1924·2019-08-29 12:25
閱讀 1087·2019-08-26 11:57