撩課-Web大前端每天5道面試題-Day2

撩課學院發表於2018-11-28

1.偽類與偽元素的區別?

1) 定義區別

偽類
      偽類用於選擇DOM樹之外的資訊,或是不能用簡單選擇器進行表示的資訊。
前者包含那些匹配指定狀態的元素,比如:visited,:active;後者包含那些滿足一定邏輯條件的DOM樹中的元素,比如:first-child,:first-of-type,:target。

偽元素
   偽元素為DOM樹沒有定義的虛擬元素。不同於其他選擇器,它不以元素為最小選擇單元,它選擇的是元素指定內容。
比如::before表示選擇元素內容的之前內容,也就是"";::selection表示選擇元素被選中的內容。      

  

2) 語法區別

  在CSS3中,偽類與偽元素在語法上也有所區別,偽元素修改為以::開頭。
   但因為歷史原因,瀏覽器對以:開頭的偽元素也繼續支援,但建議規範書寫為::開頭。

  

3) 偽類/偽元素一覽表

<偽類如下>
 
:active 選擇正在被啟用的元素  1
:hover  選擇被滑鼠懸浮著元素  1
:link   選擇未被訪問的元素   1
:visited    選擇已被訪問的元素   1
:first-child    選擇滿足是其父元素的第一個子元素的元素 2
:lang   選擇帶有指定 lang 屬性的元素   2
:focus  選擇擁有鍵盤輸入焦點的元素   2
:enable 選擇每個已啟動的元素  3
:disable    選擇每個已禁止的元素  3
:checked    選擇每個被選中的元素  3
:target 選擇當前的錨點元素   3

<偽元素如下>
 
::first-letter  選擇指定元素的第一個單詞    1
::first-line    選擇指定元素的第一行  1
::after 在指定元素的內容後面插入內容  2
::before    在指定元素的內容前面插入內容  2
::selection 選擇指定元素中被使用者選中的內容 3

  

2. css樣式優先順序,各自的權重

優先順序別:
 
通用選擇器(*) < 元素(型別)選擇器 < 類選擇器 < 屬性選擇器 < 偽類 < ID 選擇器 < 內聯樣式
 
權重:

第一等:代表內聯樣式,如: style=””,權值為1000。
第二等:代表ID選擇器,如:#content,權值為100。
第三等:代表偽類和屬性選擇器,如.content,權值為10。
第四等:代表型別選擇器和偽元素選擇器,如div p,權值為1。

 

3.常見的DOM操作有哪些?

主要操作包括:
查詢節點,新建節點,新增節點,刪除節點,修改節點;
開發中,我們用到最多的是element型別,
用於表現HTML元素,提供了對元素標籤名、子節點及特性的訪問。

1)DOM常用操作舉例:

// 查詢節點
document.getElementById(`id屬性值`); // 返回擁有指定id的第一個物件的引用        
document.getElementsByClassName(`class屬性值`); // 返回擁有指定class的物件集合

 

2)新建節點:

// 建立新的元素節點
document.createElement(`元素名`);
// 建立新的屬性節點 
document.createAttribute(`屬性名`);
// 建立新的文字節點
document.createTextNode(`文字內容`);
// 建立新的註釋節點
document.createComment(`註釋節點`);

 

3)新增節點:

var element = document.getElementsByTagName(`p`)[0];
element.innerHTML=`新增文字內容`; //插入文字內容

 

4)刪除節點:

parentNode.removeChild( existingChild ); //刪除已有的子節點,返回值為刪除節點
element.removeAttribute(`屬性名`); // 刪除具有指定屬性名稱的屬性,無返回值
element.removeAttributeNode( attrNode ); // 刪除指定屬性,返回值為刪除的屬性

 

5)修改節點:

// 新增屬性節點,修改屬性值
element.setAttribute( attributeName, attributeValue );

 

6)屬性節點:

// 增添id屬性,並修改class屬性值
var element = document.getElementsByTagName(`p`)[0];

// 新增屬性節點
var attr = document.createAttribute(`id`);
attr.value = `idValue`;
element.setAttributeNode(attr);

// 修改屬性值
var attr = document.createAttribute(`class`);
attr.value = `classNewValue`;
element.setAttributeNode(attr);

 

7)DOM事件:

允許 JavaScript 對 HTML 事件作出反應,主要包括:

onclick 事件——當使用者點選時
onload 事件——使用者進入
onunload 事件——使用者離開
onmouseover事件——滑鼠移入
onmouseout事件——滑鼠移出
onmousedown事件——滑鼠按下
onmouseup 事件——滑鼠抬起

 

4.判斷資料型別有哪些方法?

1)typeof

typeof 是一個操作符,其右側跟一個一元表示式,並返回這個表示式的資料型別。
返回的結果用該型別的字串(全小寫字母)形式表示,
包括以下 7 種:number、boolean、symbol、string、object、undefined、function 等。

 

2) instanceof

instanceof 是用來判斷 A 是否為 B 的例項,
表示式為:A instanceof B,如果 A 是 B 的例項,則返回 true,否則返回 false。 
在這裡需要特別注意的是:instanceof 檢測的是原型

 

3) constructor

當一個函式 F被定義時,JS引擎會為F新增 prototype 原型,
然後再在 prototype上新增一個 constructor 屬性,並讓其指向 F 的引用。

 

4)toString

toString() 是 Object 的原型方法,呼叫該方法,預設返回當前物件的 [[Class]]點選並拖拽以移動 。這是一個內部屬性,其格式為 [object Xxx] ,其中 Xxx 就是物件的型別。對於 Object 物件,直接呼叫 toString()  就能返回 [object Object] 。而對於其他物件,則需要通過 call / apply 來呼叫才能返回正確的型別資訊。

5.介紹一下 JS 的基本資料型別?

Undefined、Null、Boolean、Number、String

  

6.介紹一下 JS 有哪些內建物件?

Object 是 JavaScript 中所有物件的父物件; 
資料封裝類物件:Object、Array、Boolean、Number、String 
其他物件:Function、Argument、Math、Date、RegExp、Error

 

7.push()-pop()-shift()-unshift()分別是什麼功能?

// push 方法
// 將新元素新增到一個陣列中,並返回陣列的新長度值。
var a=[1,2,3,4];
a.push(5);

// pop 方法
// 移除陣列中的最後一個元素並返回該元素。
var a=[1,2,3,4];
a.pop();

// shift 方法
// 移除陣列中的第一個元素並返回該元素。
var a=[1,2];
a.shift();

// unshift 方法
// 將指定的元素插入陣列開始位置並返回該陣列。
var a=[1,2];
a.unshift(0);

 

8.null 和 undefined 有何區別?

1) null 表示一個物件被定義了,值為“空值”;
 undefined 表示不存在這個值。

typeof undefined //"undefined" 
2) undefined :是一個表示"無"的原始值或者說表示"缺少值",就是此處應該有一個值,但是還沒有定義。
當嘗試讀取時會返回 undefined; 例如變數被宣告瞭,但沒有賦值時,就等於undefined。 

typeof null //"object"  null : 是一個物件(空物件, 沒有任何屬性和方法);
3) 注意: 在驗證null時,一定要使用 === ,因為 == 無法分別 null 和 undefined

 

9.new操作符具體幹了什麼?

1)  建立一個空物件,並且 this 變數引用該物件。
2)  屬性和方法被加入到 this 引用的物件中。 
3)  新建立的物件由 this 所引用。

 

10.你對 JSON 瞭解嗎?

1) JSON(JavaScript Object Notation)是一種輕量級的資料交換格式。 
2) 它是基於JavaScript的一個子集。資料格式簡單,易於讀寫,佔用頻寬小。 
如:{"age":"12", "name":"back"}

 

1.偽類與偽元素的區別?

1) 定義區別

偽類
      偽類用於選擇DOM樹之外的資訊,或是不能用簡單選擇器進行表示的資訊。
前者包含那些匹配指定狀態的元素,比如:visited:active;後者包含那些滿足一定邏輯條件的DOM樹中的元素,比如:first-child:first-of-type,:target。

偽元素
   偽元素為DOM樹沒有定義的虛擬元素。不同於其他選擇器,它不以元素為最小選擇單元,它選擇的是元素指定內容。
比如::before表示選擇元素內容的之前內容,也就是""::selection表示選擇元素被選中的內容。                

2) 語法區別

  在CSS3中,偽類與偽元素在語法上也有所區別,偽元素修改為以::開頭。
  但因為歷史原因,瀏覽器對以:開頭的偽元素也繼續支援,但建議規範書寫為::開頭。

3) 偽類/偽元素一覽表

<偽類如下>
 
:active 選擇正在被啟用的元素  1
:hover  選擇被滑鼠懸浮著元素  1
:link   選擇未被訪問的元素   1
:visited    選擇已被訪問的元素   1
:first-child    選擇滿足是其父元素的第一個子元素的元素 2
:lang   選擇帶有指定 lang 屬性的元素   2
:focus  選擇擁有鍵盤輸入焦點的元素   2
:enable 選擇每個已啟動的元素  3
:disable    選擇每個已禁止的元素  3
:checked    選擇每個被選中的元素  3
:target 選擇當前的錨點元素   3

<偽元素如下>
 
::first-letter  選擇指定元素的第一個單詞    1
::first-line    選擇指定元素的第一行  1
::after 在指定元素的內容後面插入內容  2
::before    在指定元素的內容前面插入內容  2
::selection 選擇指定元素中被使用者選中的內容 3

2. css樣式優先順序,各自的權重

優先順序別:
 
通用選擇器(*) < 元素(型別)選擇器 < 類選擇器 < 屬性選擇器 < 偽類 < ID 選擇器 < 內聯樣式
 
權重:

第一等:代表內聯樣式,如: style=””,權值為1000。
第二等:代表ID選擇器,如:#content,權值為100。
第三等:代表偽類和屬性選擇器,如.content,權值為10。
第四等:代表型別選擇器和偽元素選擇器,如div p,權值為1。

3.常見的DOM操作有哪些?

主要操作包括:
查詢節點,新建節點,新增節點,刪除節點,修改節點;
開發中,我們用到最多的是element型別,
用於表現HTML元素,提供了對元素標籤名、子節點及特性的訪問。

1)DOM常用操作舉例:

// 查詢節點
document.getElementById(`id屬性值`); // 返回擁有指定id的第一個物件的引用        
document.getElementsByClassName(`class屬性值`); // 返回擁有指定class的物件集合

2)新建節點:

// 建立新的元素節點
document.createElement(`元素名`);
// 建立新的屬性節點 
document.createAttribute(`屬性名`);
// 建立新的文字節點
document.createTextNode(`文字內容`);
// 建立新的註釋節點
document.createComment(`註釋節點`);

3)新增節點:

var element = document.getElementsByTagName(`p`)[0];
element.innerHTML=`新增文字內容`; //插入文字內容

4)刪除節點:

parentNode.removeChild( existingChild ); //刪除已有的子節點,返回值為刪除節點
element.removeAttribute(`屬性名`); // 刪除具有指定屬性名稱的屬性,無返回值
element.removeAttributeNode( attrNode ); // 刪除指定屬性,返回值為刪除的屬性

5)修改節點:

// 新增屬性節點,修改屬性值
element.setAttribute( attributeName, attributeValue );

6)屬性節點:

// 增添id屬性,並修改class屬性值
var element = document.getElementsByTagName(`p`)[0];

// 新增屬性節點
var attr = document.createAttribute(`id`);
attr.value = `idValue`;
element.setAttributeNode(attr);

// 修改屬性值
var attr = document.createAttribute(`class`);
attr.value = `classNewValue`;
element.setAttributeNode(attr);

7)DOM事件:

允許 JavaScript 對 HTML 事件作出反應,主要包括:

onclick 事件——當使用者點選時
onload 事件——使用者進入
onunload 事件——使用者離開
onmouseover事件——滑鼠移入
onmouseout事件——滑鼠移出
onmousedown事件——滑鼠按下
onmouseup 事件——滑鼠抬起

4.判斷資料型別有哪些方法?

1)typeof

typeof 是一個操作符,其右側跟一個一元表示式,並返回這個表示式的資料型別。
返回的結果用該型別的字串(全小寫字母)形式表示,
包括以下 7 種:number、boolean、symbol、string、object、undefinedfunction 等。

2) instanceof

instanceof 是用來判斷 A 是否為 B 的例項,
表示式為:A instanceof B,如果 A 是 B 的例項,則返回 true,否則返回 false。 
在這裡需要特別注意的是:instanceof 檢測的是原型

3) constructor

當一個函式 F被定義時,JS引擎會為F新增 prototype 原型,
然後再在 prototype上新增一個 constructor 屬性,並讓其指向 F 的引用。

4)toString

toString() 是 Object 的原型方法,呼叫該方法,預設返回當前物件的 [[Class]]點選並拖拽以移動 。這是一個內部屬性,其格式為 [object Xxx] ,其中 Xxx 就是物件的型別。對於 Object 物件,直接呼叫 toString()  就能返回 [object Object] 。而對於其他物件,則需要通過 call / apply 來呼叫才能返回正確的型別資訊。

5.介紹一下 JS 的基本資料型別?

Undefined、Null、BooleanNumberString

6.介紹一下 JS 有哪些內建物件?

Object 是 JavaScript 中所有物件的父物件; 
資料封裝類物件:ObjectArrayBooleanNumberString 
其他物件:Function、Argument、MathDateRegExpError

7.push()-pop()-shift()-unshift()分別是什麼功能?

// push 方法
// 將新元素新增到一個陣列中,並返回陣列的新長度值。
var a=[1,2,3,4];
a.push(5);

// pop 方法
// 移除陣列中的最後一個元素並返回該元素。
var a=[1,2,3,4];
a.pop();

// shift 方法
// 移除陣列中的第一個元素並返回該元素。
var a=[1,2];
a.shift();

// unshift 方法
// 將指定的元素插入陣列開始位置並返回該陣列。
var a=[1,2];
a.unshift(0);

8.null 和 undefined 有何區別?

1) null 表示一個物件被定義了,值為“空值”;
 undefined 表示不存在這個值。

typeof undefined //"undefined" 
2) undefined :是一個表示"無"的原始值或者說表示"缺少值",就是此處應該有一個值,但是還沒有定義。
當嘗試讀取時會返回 undefined; 例如變數被宣告瞭,但沒有賦值時,就等於undefinedtypeof null //"object"  null : 是一個物件(空物件, 沒有任何屬性和方法);
3) 注意: 在驗證null時,一定要使用 === ,因為 == 無法分別 nullundefined

9.new操作符具體幹了什麼?

1)  建立一個空物件,並且 this 變數引用該物件。
2)  屬性和方法被加入到 this 引用的物件中。 
3)  新建立的物件由 this 所引用。

10.你對 JSON 瞭解嗎?

1) JSON(JavaScript Object Notation)是一種輕量級的資料交換格式。 
2) 它是基於JavaScript的一個子集。資料格式簡單,易於讀寫,佔用頻寬小。 
如:{"age":"12", "name":"back"}

相關文章