1、DOM和BOM的區別
DOM:
document object model;文檔對象模型,提供操作頁面元素的方法和屬性
BOM:browser object model;瀏覽器對象模型,提供一些屬性和方法可以操作瀏覽器
2、JS有幾種引入方式
1、行內式 直接在標簽中寫js代碼
2、內嵌式 可以有多個script標簽,從上到下
3、外聯式 直接導入script標簽,相對路徑
4、導入式 import
3、innerHTML 和innerText : 區別
innerHTML 可以識別標簽;
innerText : 不能識別標簽;會把所有的東西當作文本;
4、基本數據類型和引用數據類型的區別?
基本數據類型存儲到棧內存中,引用數據類型存儲到堆內存中
基本數據類型操作值的,引用數據類型操作的是空間地址;
5、基本數據類型有哪些?
number(數字) string(字符串) boolean(布爾) null undefined;
6、引用數據類型都有哪些?
對象數據類型:
- 普通的對象、數組 、正則 、Date的實例、Math…
函數數據類型- 普通函數、類;
7、其他數據類型轉布爾類型是false有且只有哪些?
0 、 “” 、 NaN 、null 、undefined
8、邏輯運算符:與、或、非
|| : 只要其中有一個為true,整體結果是true;
&& : 只要有一個是false,整體結果是false;
!:取反 (比較:轉布爾,在取反)
9、null和undefined的區別?
typeof null –> “object”; 空對象指針;
null 表示現在沒有,但是以后可能會有;
undefined :現在沒有,以后也不能有;
undefined是訪問一個未初始化的變量時返回的值,而null是訪問一個尚未存在的對象時所返回的值。因此,可以把undefined看作是空的變量,而null看作是空的對象
10、常見的null的情況
1.通過ID獲取元素,如果ID名字不存在,那么返回null;
2.通過正則進行捕獲時,如果沒有捕獲到內容,那么結果是null;
3.在清空對象,銷毀堆內存時,給對象賦值時,賦值為null;
11、常見的undefined的情況
1.當獲取對象屬性名對應的屬性值時如果屬性名不存在,那么返回值是undefined;
2.函數的形參如果沒有實參賦
值,在函數中默認存儲undefined
3.如果函數沒有return,那么函數的返回值是undefined;
4.如果變量只聲明,沒有賦值,那么默認存儲也是undefined;
12、對象的定義
1.首先會開辟一個新的空間地址;空間地址是16進制;0-9a-f;
2.把鍵值對存儲到當前這個堆內存下;
3.把這個空間地址給了對象名;(函數定義同上,把函數體中的代碼當做字符串存儲到堆內存)
13、JS四種檢測
1、typeOf:只能檢測基本數據類型
2、instanceOf:檢測當前實例是否屬於某個類的方法
3、檢測當前實例的構造函數
4、Object.prototype.toString.call([]); 最准確的方式;
14、continue和break的區別
continue; 結束本輪循環;
break: 結束整個循環;
15、for…in..和for…of..的區別?
for in 遍歷循環對象
- 同時
for in也可以遍歷數組,但是會出現以下問題
1、index索引為字符串型數字,不能直接進行幾何運算
2、遍歷順序有可能不是按照實際數組的內部順序
3、使用for in會遍歷數組所有的可枚舉屬性,包括原型。
for in遍歷的是數組的索引(即鍵名),而for of遍歷的是數組元素值。
for of 遍歷循環數組
- for of遍歷的只是數組內的元素,而不包括數組的原型屬性method和索引name
16、什么是函數的封裝?
把實現相同功能的代碼放到一個函數體中,當想實現這個功能時,直接執行這個函數即可;減少了的冗余;高內聚,低耦合
17、堆棧內存
當瀏覽器加載頁面時,會形成兩個虛擬的內存;一個棧內存,堆內存;
棧內存:
- 1) 提供代碼的運行環境;
- 2) 存儲基本數據類型;
堆內存:
存儲引用數據類型;
18、函數的執行過程
- 1.首先會形成一個私有的作用域
- 2.形參賦值
- 3.變量提升
- 4.代碼從上到下運行;
- 5.作用域的銷毀;
在函數執行時,函數體中可以找到函數外面的變量;但是函數外面不能訪問里面的變量;
19、閉包
當函數執行時,首先會形成一個私有的作用域,這個私有作用域保護了里面的私有變量不受外界的干擾;這種機制--> "閉包";
20、數據類型之間的比較
NaN 和自己都不相等;
數據類型比較的規律對象==對象: 比較的是空間地址對象==字符串對象默認調用toString方法,先轉字符串,然后再進行比較對象==布爾: 對象先轉字符串,再轉數字;布爾直接轉數字;對象== 數字: 對象先調用toString轉換成字符串,然后再轉number;布爾== 數字: 布爾轉數字;字符串== 數字: 字符串轉數字;布爾== 字符串: 布爾轉數字,字符串也轉數字,然后進行比較;
null == undefined : true;
null 和 undefined 和其他數據類型比較都是false;
21、arguments 類數組對象
任意數求和
22、原生JS選項卡片段
23、Number的方法
isNaN: 強制轉換成number,在判斷Number:將其他數據類型的值強制轉換成number類型;parseInt:經常用於字符串提取數字的方法;parseFloat:和parseInt 用法一樣;區別是多識別一位小數點toFixed: 保留小數點位數的方法;返回值是一個字符串;
24、字符串的方法(13個)
toUpperCase: 把小寫字母轉成大寫toLowerCase把大寫轉小寫charAt: 通過索引獲取字符charCodeAt: 通過索引獲取對應字符的Unicode編碼;substr: 截取 substr(m,n) 從索引m開始,截取n個字符;substring: substring(m,n) :從索引m開始,截取到索引n,不包含n; (不支持負數)slice(m,n): substring; 從索引m開始,截取到索引n,不包含n (支持負數)indexOf: 檢測字符在字符串中第一次出現的索引位置;lastIndexOf: 檢測字符在字符串中最后一次出現的索引位置;split: 把字符串按照特定的字符分隔數組中的每一項;replace:替換;原有字符串不變;用新字符替換舊的字符concat: 拼接trim: 去空格 : 去除字符串中左右的空格;
25、字符串的運算
- * /: 會先把字符串轉換成數字,然后再進行計算
- 任何數字和NaN 計算,結果都是NaN;
- 任何數字和undefined運算,得到也是NaN;
+: 字符串拼接;
- [] : 空數組在進行拼接時,會默認調用toString轉換成空字符串;然后拼接;
26、數組的方法(15個)
push:向數組末尾新增一項;可以傳多個;pop: 刪除數組的最后一項;不需要傳參數;unshift:向數組開頭新增一項;需要傳參數;shift:刪除數組的第一項;不需要傳參
sort:數組的排序reverse:將數組顛倒
原有數組發生改變;
concat:數組的拼接join:數組的連接indexOf:第一次出現的索引位置lastIndexOf:最后一次出現的索引位置map:數組的遍歷和映射forEach:遍歷數組toString:轉字符串
原有數組不發生改變;
slice:數組的截取
slice(m,n): 從數組索引m開始,截取到索引n,但是不包含n;[前包后不包]
slice(m) : 從索引m開始,截取到末尾;
slice():數組的克隆 slice(0);
原有數組不發生改變;
splice:刪除數組中的某幾項
splice(m,n): 從索引開始,刪除n個
splice(m) : 從索引m開始刪除到末尾;
splice(0):
splice(m,x,n);替換從索引m開始,刪除x個,用n替換;
原有數組發生改變
27、獲取元素的方法
document.getElementById:通過ID名來獲取元素document.getElementsByTagName: 通過標簽名來獲取元素document.getElementsByClassName(); 類數組集合;document.getElementsByName;通過name屬性來獲取元素;document.documentElement獲取當前的html
body :獲取頁面的body元素;document.querySelector();如果是id名加#,如果是class名加.document.querySelectorAll();獲取所有的元素
28、DOM四種類型的節點
| TYPE | nodeType | nodeName | nodeValue |
| 元素節點 | 1 | 大寫的標簽名 | null |
| 文本節點 | 3 | text | 文本內容 |
| 注釋節點 | 8 | comment | 注釋內容 |
| document | 9 | document | null |
空格和換行都是文本節點;
29、DOM節點的屬性
childNodes: 獲取當前元素所有的子節點;children: 獲取當前元素的子元素節點;firstChild: 獲取第一子節點;lastChild:獲取最后一個子節點previousSibling: 獲取上一個哥哥節點nextSibling: 獲取下一個弟弟節點parentNode: 獲取當前元素的父親節點;
30、封裝previousSibling
31、動態操作DOM的方法
document.createElement;創建元素appendChild: 向元素的末尾添加子節點;removeChild: 刪除子節點;replaceChild: 替換節點;insertBefore:把元素節點插入某個節點的前面cloneNode: 復制節點;set/get/remove Attribute: 設置自定義行內屬性;
32、Math的方法
Math.abs(): 取絕對值;Math.floor(): 向下取整Math.ceil(): 向上取整Math.max(): 取最大值Math.min(): 取一組數的最小值Math.random()取隨機數,取值范圍[0,1)Math.round(): 四舍五入取整
取m-n之間的隨機整數:Math.round(Math.random()*(n-m)+m)Math.pow(): 取冪次方Math.sqrt(): 開平方;
33、Date的實例
34、數組的去重
1、indexOf: 判斷當前項在數組中是否存在,不存在返回-1;
2、對象的屬性名不能重復;
3、轉換成數組
35、函數的遞歸
遞歸: 針對的是函數; 是JS中一種重要的思想;
函數: 分為定義和執行
函數遞歸: 在函數體內部,調用函數自己本身,讓其執行;這就是遞歸;
36、求1-100之間是3倍數的和
% : 取模;取余數
37、數組的插入排序
38、數組的冒泡排序
39、數組的快速排序
快速排序快速排序的原理: 首先取原有數組中的中間項;接下來循環原有的數組每一項,和中間項進行比較,如果比中間項的小的放在左邊的數組中,比中間項大的放在右邊的數組中;然后再對左邊和右邊數組進行剛才的操作;最后把所有的小數組和中間項串在一起就是排好的數組;
40、隨機驗證碼
41、設置定時器
1) setTimeout()
2) setInterval()
42、清除定時器
1) clearTimeout()
2) setInterval()
