成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端面經(jīng)整理之JS和CSS

stonezhu / 1002人閱讀

摘要:作為對象原型鏈的終點(diǎn)。調(diào)用函數(shù)時,應(yīng)該提供的參數(shù)沒有提供,該參數(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ù)據(jù)類型是否一樣
相等運(yùn)算符在比較相同類型的數(shù)據(jù)時,與嚴(yán)格相等運(yùn)算符完全一樣。 在比較不同類型的數(shù)據(jù)時,相等運(yùn)算符會先將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,然后再用嚴(yán)格相等運(yùn)算符比較。

undefined == null //true
undefined === null //false

ps:判斷NaN可以用Object.is()

Object.is(NaN, NaN); //true
undefined和null的區(qū)別

首先,undefinednullif語句中,都會被自動轉(zhuǎn)為false,即null==undefined結(jié)果為true

通常 null表示"沒有對象",即該處不應(yīng)該有值,一般用法如下:
(1) 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象。
(2) 作為對象原型鏈的終點(diǎn)。Object.getPrototypeOf(Object.prototype) // null
undefined表示"缺少值",就是此處應(yīng)該有一個值,但是還沒有定義,一般用法:
(1)變量被聲明了,但沒有賦值時,就等于undefined。
(2) 調(diào)用函數(shù)時,應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于undefined。
(3)對象沒有賦值的屬性,該屬性的值為undefined。
(4)函數(shù)沒有返回值時,默認(rèn)返回undefined。

JS的基本數(shù)據(jù)類型

JS基本數(shù)據(jù)類型有5種
String Number Boolean Null Undefined
以及引用數(shù)據(jù)類型Object(包括Array Function)

JS中typeof和instanceof用法區(qū)別

首先typeof用以獲取一個變量類型
typeof一般只能返回如下幾個結(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無法判斷array類型 因?yàn)椴还苁菙?shù)組還是對象都會返回object
這時候就需要instanceof
instanceof運(yùn)算符用來測試一個對象在其原型鏈中是否存在一個構(gòu)造函數(shù)的prototype屬性 即判斷一個變量是否是某個對象的實(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]"; //true
JS用setTimeout遞歸實(shí)現(xiàn)setInterval

首先 setTimeout()setInterval()經(jīng)常被用來處理延時和定時任務(wù) setTimeout()方法用于在指定的毫秒數(shù)后調(diào)用函數(shù)或計算表達(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.callee

arguments對象是所有(非箭頭)函數(shù)中都可用的局部變量。你可以使用arguments對象在函數(shù)中引用函數(shù)的參數(shù)
calleearguments 對象的一個屬性。它可以用于引用該函數(shù)的函數(shù)體內(nèi)當(dāng)前正在執(zhí)行的函數(shù)。這在函數(shù)的名稱是未知時很有用,例如在沒有名稱的函數(shù)表達(dá)式 (也稱為“匿名函數(shù)”)內(nèi)

代碼演示:

此外arguments是類數(shù)組對象 其沒有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)格模式的用法

// 為整個script標(biāo)簽開啟嚴(yán)格模式, 需要在所有語句之前放一個特定語句 "use strict";
"use strict";
var v = "Hi!  I"m a strict mode script!";


//要給某個函數(shù)開啟嚴(yán)格模式,得把 "use strict";聲明一字不漏地放在函數(shù)體所有語句之前
function strict(){
  // 函數(shù)級別嚴(yán)格模式語法
  "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)格模式同時改變了語法及運(yùn)行時行為。變化通常分為這幾類:將問題直接轉(zhuǎn)化為錯誤(如語法錯誤或運(yùn)行時錯誤), 簡化了如何為給定名稱的特定變量計算,簡化了 eval 以及 arguments, 將寫"安全"JavaScript的步驟變得更簡單

嚴(yán)格模式主要涉及如下幾個方面

創(chuàng)設(shè)eval作用域

禁止this關(guān)鍵字指向全局對象

禁止在函數(shù)內(nèi)部遍歷調(diào)用棧(即禁止使用argumentscallee)

對象不能有重名的屬性

函數(shù)不能有重名的參數(shù)

函數(shù)必須聲明在頂層

...

詳情 請移步阮一峰的 Javascript 嚴(yán)格模式詳解

JS閉包

閉包Closure詳見 白話JS閉包

JS數(shù)組去重的簡潔方法

主要是利用 ES6 setfilter方法 詳見 最近碰到的sort排序 以及 set和filter數(shù)組去重

JS中的apply、call、bind

簡單總結(jié):

apply 、 call 、bind 三者都是用來改變函數(shù)的this對象的指向的;
apply 、 call 、bind 三者第一個參數(shù)都是this要指向的對象,也就是想指定的上下文;
apply 、 call 、bind 三者都可以利用后續(xù)參數(shù)傳參;
bind是返回對應(yīng)函數(shù),便于稍后調(diào)用;apply、call則是立即調(diào)用
call 需要把參數(shù)按順序一個個傳遞進(jìn)來,而 apply 則是把參數(shù)放在數(shù)組里

詳情移步深入淺出妙用 Javascript 中 apply、call、bind

JS的 for in 和 for of

簡單說 for in是遍歷keyfor 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:如何將對象的鍵名輸出數(shù)組

當(dāng)然for in配合hasOwnProperty可以過濾來著原型鏈上繼承得到的屬性

異步解決方案Promise

Promise的構(gòu)造函數(shù)接收一個參數(shù),是函數(shù),并且傳入兩個參數(shù):resolve,reject,分別表示異步操作執(zhí)行成功后的回調(diào)函數(shù)和異步操作執(zhí)行失敗后的回調(diào)函數(shù)。其實(shí)這里用“成功”和“失敗”來描述并不準(zhǔn)確,按照標(biāo)準(zhǔn)來講,resolve是將Promise的狀態(tài)置為fullfiled,reject是將Promise的狀態(tài)置為rejected

舉個?

ps:promise詳情請移步大白話講解Promise

二 CSS CSS3的box-sizing

1.content-box 默認(rèn)值 borderpadding不計算入width之內(nèi)
2.border-box borderpadding計算入width之內(nèi)

rem和em的區(qū)別

em是相對于父元素的font-size屬性值來計算的
rem是相對于html標(biāo)簽的font-size屬性值來計算的

居中的幾種方法

主要是水平居中或者垂直居中
詳見web開發(fā)常用的幾種居中形式

CSS的三種基本引入方式
//外部樣式表 

//內(nèi)部樣式表

//內(nèi)聯(lián)

這是一個段落。

CSS權(quán)重計算

內(nèi)聯(lián)樣式表的權(quán)值最高 1000
ID 選擇器的權(quán)值為 100
Class 類選擇器的權(quán)值為 10
HTML 標(biāo)簽選擇器的權(quán)值為 1

CSS display: none和visibility: hidden的區(qū)別

①都是隱藏元素,但是前者文檔布局中不占用空間,后者仍占用空間
display:none隱藏產(chǎn)生reflowrepaint(回流與重繪)
③前者有株連性,即父元素設(shè)置display: none后子元素不管怎樣設(shè)置都不能顯示,而后者的子元素通過設(shè)置visibility: visible后還是能顯示出來的

CSS的reflow和repaint

reflow:當(dāng)render樹的一部分或者全部因?yàn)榇笮∵吘嗟葐栴}發(fā)生改變而需要重建的過程,叫做回流
repaint:當(dāng)諸如顏色背景等不會引起頁面布局變化,而只需要重新渲染的過程叫做重繪

ps:頁面的顯示過程分為以下幾個階段

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詳情請移步

未完待續(xù)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89697.html

相關(guān)文章

  • 前端面經(jīng)整理JSCSS

    摘要:作為對象原型鏈的終點(diǎn)。調(diào)用函數(shù)時,應(yīng)該提供的參數(shù)沒有提供,該參數(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ù)據(jù)類型是否一樣相等運(yùn)算符在比較相同類型的數(shù)據(jù)時,與嚴(yán)格相等運(yùn)算符完全一樣。 在比較不同類型的數(shù)據(jù)時,相等運(yùn)算符會先將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,...

    lvzishen 評論0 收藏0
  • 前端最強(qiáng)面經(jīng)匯總

    摘要:獲取的對象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對象即使沒有代碼,也會把默認(rèn)的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對于一個光禿禿的元素,方法返回對象中屬性值如果有就是據(jù)我測試不同環(huán)境結(jié)果可能有差異而就是。 花了很長時間整理的前端面試資源,喜歡請大家不要吝嗇star~ 別只收藏,點(diǎn)個贊,點(diǎn)個star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項目地址 https:...

    wangjuntytl 評論0 收藏0
  • 拒信收割機(jī)の前端面經(jīng)(CVTE,唯品會,百度)

    摘要:另外回答的時候要淡定,一些問題就算不懂也不能慌,要和面試官談笑風(fēng)生,然后盡量扯回到自己懂的東西上面大公司比如百度給我的感覺就是很重視基礎(chǔ)思維和潛力。 —— 雖然我的offer少,但是我的拒信多啊 這幾天終于閑下來,做一點(diǎn)微小的工作,整理了一些之前幾家公司的前端面試題和個人經(jīng)驗(yàn),想做前端的師弟妹可以參考,也歡迎各同行大神來指教~ (以下問題不分先后,時間久遠(yuǎn)難免有些遺漏;很多問題面試官都...

    yzd 評論0 收藏0
  • 拒信收割機(jī)の前端面經(jīng)(CVTE,唯品會,百度)

    摘要:另外回答的時候要淡定,一些問題就算不懂也不能慌,要和面試官談笑風(fēng)生,然后盡量扯回到自己懂的東西上面大公司比如百度給我的感覺就是很重視基礎(chǔ)思維和潛力。 —— 雖然我的offer少,但是我的拒信多啊 這幾天終于閑下來,做一點(diǎn)微小的工作,整理了一些之前幾家公司的前端面試題和個人經(jīng)驗(yàn),想做前端的師弟妹可以參考,也歡迎各同行大神來指教~ (以下問題不分先后,時間久遠(yuǎn)難免有些遺漏;很多問題面試官都...

    channg 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<