主頁 > 前端設計 > 時隔許久,精心整理的超級實用的Web前端面試題總結后續來啦

時隔許久,精心整理的超級實用的Web前端面試題總結后續來啦

2021-09-28 08:09:13 前端設計

文章目錄

  • Web前端面試題總結(二)JavaScript篇
    • 1、JavaScript 是一門什么樣的語言,它有哪些特點?
    • 2、javascript 的本地物件,內置物件和宿主物件?
    • 3、js 的內置物件有哪些?列舉一下 arry 和 string 的常用方法?
    • 4、例舉 3 種強制型別轉換和 2 種隱式型別轉換?
    • 5、操作 DOM 的常用 API ?
    • 6、BOM 之常用 API ?
    • 7、prop 和 attr 的區別?
    • 8、 typeof 和 instanceof 區別 ?
    • 9、什么是閉包?
    • 10、說說你對原型(prototype)理解 ?
    • 11、介紹下原型鏈(解決的是繼承問題嗎)?
    • 12、簡單說說 js 中的繼承 ?
    • 13、介紹 this 各種情況?
    • 14、陣列中的 forEach 和 map 的區別?
    • 15、for in 和 for of 的區別 ?
    • 16、Call 和 apply,bind 的區別 ?
    • 17、New 運算子具體干了什么呢?
    • 18、用 js 實作隨機選取 10–100 之間的 10 個數字,存入一 個陣列并排序?
    • 19、已知陣列 var stringArray = [“This”,“is”, “Baidu”,“Campus”],Alert 出”This is Baidu Campus”
    • 20、已知有字串 foo=”get-element-by-id”,寫一個 function 將其轉化成駝峰 表示法”getElementById”
    • 22、寫一個 function,清除字串前后的空格,(兼容所有 瀏覽器)
    • 23、判斷一個字串中出現次數最多的字符,統計這個次數
    • 24、Split()和 join()的區別?
    • 25、js 陣列去重,能用幾種方法實作?
    • 26、談談你對 Javascript 垃圾回識訓制的理解?
    • 27、js 如何處理防抖和節流?
    • 28、如何判斷 JavaScript 的資料型別?
    • 29、創建物件有幾種方法
    • 30、=== 和 ==的區別?
        • 寫給看到最后的你

Web前端面試題總結(二)JavaScript篇

1、JavaScript 是一門什么樣的語言,它有哪些特點?

javaScript 一種直譯式腳本語言,是一種動態型別、弱型別、基于原型的語言,內置支持型別,它的解釋器被稱為 JavaScript 引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言,最早是在 HTML 網頁上使用,用來給HTML 網頁增加動態功能,JavaScript 兼容于ECMA 標準,因此也稱為ECMAScript,
基 本 特 點
1.是一種解釋性腳本語言(代碼不進行預編譯),
2.主要用來向 HTML(標準通用標記語言下的一個應用)頁面添加互動行為,
3.可以直接嵌入 HTML 頁面,但寫成單獨的 js 檔案有利于結構和行為的分離,
4.跨平臺特性,在絕大多數瀏覽器的支持下,可以在多種平臺下運行(如 Windows、Linux、Mac、Android、iOS 等),

2、javascript 的本地物件,內置物件和宿主物件?

本地物件為 array obj regexp 等可以 new 實體化內置物件為 gload Math 等不可以實體化的
宿主為瀏覽器自帶的 document,window 等

3、js 的內置物件有哪些?列舉一下 arry 和 string 的常用方法?

JavaScript 常見的內置物件有 Object,Math,String,Array,Number,Function,Boolean,JSON 等,其中 Object
是所有物件的基類,采用了原型繼承方式.
String:charAt(); charCodeAt(); indexOf(); match(); replace(); search(); slice(); toUpperCase(); toLowerCase(); 等方法
Array:shift(); unshift(); pop(); push(); concat(); reverse(); splice(); slice(); 等方法

4、例舉 3 種強制型別轉換和 2 種隱式型別轉換?

強制:parseInt()、parseFloat()、Number() 隱式:== 、console.log()、alert()

5、操作 DOM 的常用 API ?

1.節 點 查 找 document.getElementById…
2.節點創建. createElement cloneNode… 3.節點修改 appendChild insertBefore RemoveChild replaceChild…
4.元素屬性型 setAttribute getAttribute…

6、BOM 之常用 API ?

navigator:window 中封裝瀏覽器屬性和配置資訊的物件cookieEnabled:識別瀏覽器是否啟用 cookie,回傳值 true/false userAgent:保存了瀏覽器名稱和版本的字串
plugins:保存瀏覽器中所有插件資訊的集合,每個 plugin 物件的 name 屬性保存了插件的名稱
screen:保存顯示屏資訊的物件 history:保存視窗的歷史記錄堆疊 location:指代當前視窗正在訪問的 url 地址物件
location.href:保存了當前視窗正在訪問的 url 地址,設定 href 屬性為新 url,會在當前視窗打開新的地址頁面
location.search():獲取 url 上面 ?后面的引數
location.reload():重繪當前頁面
location.assign(url):設定當前視窗的新 url
location.reload(true/false):true —— 無論是否更改,都獲取更新;false —— 被修改的頁面,重新獲取,未被修改的頁面,從緩沖獲取定時器:讓程式按指定時間間隔,自動執行任務,任務是所有定時器的核心

7、prop 和 attr 的區別?

對于 HTML 元素本身就帶有的固有屬性,在處理時,使用 prop 方法,
對于 HTML 元素我們自己自定義的 DOM 屬性,在處理時,使用 attr 方法,
栗子 1:

<a href="http://www.baidu.com" target="_self" class="btn">百度</a>

這個例子里a元素的 DOM 屬性有“href、target 和 class",這些屬性就是a元素本身就帶有的屬性,也是 W3C 標準里就包含有這幾個屬性,或者說在 IDE 里能夠智能提示出的屬性,這些就叫做固有屬性,處理這些屬性時,建議使用 prop 方法,

<a href="#" id="link1" action="delete">洗掉</a>

這個例子里a元素的 DOM 屬性有“href、id 和 action”,很明顯,前兩個是固有屬性,而后面一個“action”屬性是我們自己自定義上去的,a元素本身是沒有這個屬性的,這種就是自定義的 DOM 屬性,處理這些屬性時,建議使用 attr 方法,

8、 typeof 和 instanceof 區別 ?

在 javascript 中,判斷一個變數的型別可以用 typeof
1、數字型別、typeof 回傳的值是 number,比如說:typeof(1),回傳值是 number 2、字串型別,typeof 回傳的值是 string,比如 typeof(“123”回傳值時 string) 3、布爾型別,typeof 回傳的值是 boolean,比如 typeof(true)回傳值時 boolean 4、物件、陣列、null 回傳的值是 object,比如 typeof(window),typeof(document),typeof(null)
回傳的值都是 object
5、函式型別,回傳的值是 function,比如:typeof(eval),typeof(Date)回傳的值都是 function, 6、不存在的變數、函式或者 undefined,將回傳 undefined,比如:typeof(abc)、typeof(undefined)
都回傳 undefined
在 javascript 中,instanceof 用于判斷某個物件是否被另一個函式構造
使用 typeof 運算子時采用參考型別存盤值會出現一個問題,無論參考的是什么型別的物件,它都 回傳”object”,ECMAScript 引入了另一個 Java 運算子 instanceof 來解決這個問題,Instanceof 運算 符與 typeof 運算子相似,用于識別正在處理的物件的型別,與 typeof 方法不同的是,instanceof 方法要求開發者明確地確認物件為某特定型別

9、什么是閉包?

“閉包就是能夠讀取其他函式內部變數的函式,例如在 javascript 中,只有函式內部的子函式 才能讀取區域變數,所以閉包可以理解成“定義在一個函式內部的函式“,在本質上,閉包是將函 數內部和函式外部連接起來的橋梁,”
舉例:創建閉包最常見方式,就是在一個函式內部創建另一個函式,下面例子中的 closure 就 是一個閉包,

function func(){
var a =1 ,b = 2;
funciton closure(){ return a+b; } return closure; } 

10、說說你對原型(prototype)理解 ?

JavaScript 是一種通過原型實作繼承的語言與別的高級語言是有區別的,像 java,C#是通 過型別決定繼承關系的,JavaScript 是的動態的弱型別語言,總之可以認為 JavaScript 中所有 都是物件,在 JavaScript 中,原型也是一個物件,通過原型可以實作物件的屬性繼承,JavaScript 的物件中都包含了一個” prototype”內部屬性,這個屬性所對應的就是該物件的原型
“prototype”作為物件的內部屬性,是不能被直接訪問的,所以為了方便查看一個物件的原 型,Firefox 和 Chrome 內核的 JavaScript 引擎中提供了”proto“這個非標準的訪問器(ECMA 新 標準中引入了標準物件原型訪問器”Object.getPrototype(object)”)
原型的主要作用就是為了實作繼承與擴展物件

11、介紹下原型鏈(解決的是繼承問題嗎)?

JavaScript 原型: 每個物件都會在其內部初始化一個屬性,就是 prototype(原型) 原型鏈:
當我們訪問一個物件的屬性時,如果這個物件內部不存在這個屬性,那么他就會去 prototype 里找這個屬性,這個 prototype 又會有自己的 prototype,于是就這樣一直找下去, 也就是我們平時所說的原型鏈的概念
特點:
JavaScript 物件是通過參考來傳遞的,我們創建的每個新物件物體中并沒有一份屬于自己 的原型副本,當我們修改原型時,與之相關的物件也會繼承這一改變

12、簡單說說 js 中的繼承 ?

繼承有以下六種方法
1、原型鏈繼承 JavaScript 實作繼承的基本思想:通過原型將一個參考型別繼承另一個參考 型別的屬性和方法
2、借用建構式繼承(偽造物件或經典繼承) JavaScript 實作繼承的基本思想:在子類構造 函式內部呼叫超型別建構式, 通過使用 apply()和 call()方法可以在新創建的子類物件上執行建構式
3、組合繼承(原型+借用構造)(偽經典繼承) JavaScript 實作繼承的基本思想:將原型鏈和借 用建構式的技術組合在一塊,從而發揮兩者之長的一種繼承模式 將原型鏈和借用建構式的技術組合到一起,從而取長補短發揮兩者長處的一種繼承模式 4、型式繼承 JavaScript 實作繼承的基本思想:借助原型可以基于已有的物件創建新物件, 同時還不必須因此創建自定義的型別
5、寄生式繼承 JavaScript 實作繼承的基本思想:創建一個僅用于封裝繼承程序的函式,該 函式在內部以某種方式來增強物件,最后再像真正是它做了所有作業一樣回傳物件, 寄生式繼承是原型式繼承的加強版
6、寄生組合式繼承 JavaScript 實作繼承的基本思想:通過借用函式來繼承屬性,通過原型 鏈的混成形式來繼承方法

13、介紹 this 各種情況?

this 的情況:
1、以函式形式呼叫時,this 永遠都是 window 2、以方法的形式呼叫時,this 是呼叫方法的物件 3、以建構式的形式呼叫時,this 是新創建的那個物件 4、使用 call 和 apply 呼叫時,this 是指定的那個物件 5、箭頭函式:箭頭函式的 this 看外層是否有函式
如果有,外層函式的 this 就是內部箭頭函式的 this
如果沒有,就是 window
6、特殊情況:通常意義上 this 指標指向為最后呼叫它的物件,這里需要注意的一點就是
如果回傳值是一個物件,那么 this 指向的就是那個回傳的物件,如果回傳值不是一個物件那么 this 還是指向函式的實體

14、陣列中的 forEach 和 map 的區別?

forEach 和 map 的相同點
相同點 都是回圈遍歷陣列中的每一項
forEach 和 map 方法里每次執行匿名函式都支持 3 個引數,引數分別是 item(當前每一項), index(索引值),arr(原陣列)
匿名函式中的 this 都是指向 window 只能遍歷陣列 都不會改變原陣列 區別:
map 方法
1.map 方法回傳一個新的陣列,陣列中的元素為原始陣列呼叫函式處理后的值
2.map 方法不會對空陣列進行檢測,map 方法不會改變原始陣列, 3.瀏覽器支持:chrome、Safari1.5+、opera 都支持,IE9+, 若 arr 為空陣列,則 map 方法返 回的也是一個空陣列,
forEach 方法
1.forEach 方法用來呼叫陣列的每個元素,將元素傳給回呼函式
2.forEach 對于空陣列是不會呼叫回呼函式的, 無論 arr 是不是空陣列,forEach 回傳的都是 undefined,這個方法只是將陣列中的每一項作為 callback 的引數執行一次

15、for in 和 for of 的區別 ?

1、推薦在回圈物件屬性的時候使用 for…in,在遍歷陣列的時候的時候使用 for…of
2、for…in 回圈出的是 key,for…of 回圈出的是 value
3、注意,for…of 是 ES6 新引入的特性,修復了 ES5 引入的 for…in 的不足
4、for…of 不能回圈普通的物件,需要通過和 Object.keys()搭配使用

16、Call 和 apply,bind 的區別 ?

call 方法呼叫一個函式, 其具有一個指定的 this 值和分別地提供的引數(引數的串列), 注意:該方法的作用和 apply() 方法類似,只有一個區別,就是 call()方法接受的是若干個 引數的串列,而 apply()方法接受的是一個包含多個引數的陣列
方法呼叫一個具有給定 this 值的函式,以及作為一個陣列(或類似陣列物件)提供的引數, 注意:call()方法的作用和 apply() 方法類似,區別就是 call()方法接受的是引數串列,而 apply() 方法接受的是一個引數陣列
bind()方法創建一個新的函數,當這個新的函式被呼叫時,其 this 置為提供的值,其引數 串列前幾項,置為創建時指定的引數序列

17、New 運算子具體干了什么呢?

1、創建一個空物件: 并且 this 變數引入該物件,同時還繼承了函式的原型
2、設定原型鏈 空物件指向建構式的原型物件
3、執行函式體 修改建構式 this 指標指向空物件,并執行函式體
4、判斷回傳值 回傳物件就用該物件,沒有的話就創建一個物件

18、用 js 實作隨機選取 10–100 之間的 10 個數字,存入一 個陣列并排序?

function randomNub(aArray, len, min, max) {
if (len >= (max - min)) {
return '超過' + min + '-' + max + '之間的個數范圍' + (max - min - 1) + '個 的總數';
}
if (aArray.length >= len) {
aArray.sort(function(a, b) {
return a - b
});
return aArray;
}
var nowNub = parseInt(Math.random() * (max - min - 1)) + (min + 1);
for (var j = 0; j < aArray.length; j++) {
if (nowNub == aArray[j]) {
randomNub(aArray, len, min, max);
return;
}
}
aArray.push(nowNub);
randomNub(aArray, len, min, max);
return aArray;
}
var arr=[];
randomNub(arr,10,10,100);

19、已知陣列 var stringArray = [“This”,“is”, “Baidu”,“Campus”],Alert 出”This is Baidu Campus”

var stringArray = ["This", "is", "Baidu", "Campus"] alert(stringArray.join(""))

20、已知有字串 foo=”get-element-by-id”,寫一個 function 將其轉化成駝峰 表示法”getElementById”

function combo(msg){
var arr=msg.split("-");
for(var i=1;i<arr.length;i++){ arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1); }
msg=arr.join("");
return msg;
}```

##  21、有這樣一個 URL: http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,請寫 一段 JS 程式提取 URL 中的各個 GET 引數(引數名和引數個數不確定),將其按 key-value 形式回傳到一個 json 結構中,如{a: "1", b: "2", c: "", d: "xxx", e: undefined}

```javascript
function serilizeUrl(url) {
var urlObject = {};
if (/\?/.test(url)) {
var urlString = url.substring(url.indexOf("?") + 1); var urlArray = urlString.split("&");
for (var i = 0, len = urlArray.length; i < len; i++) { var urlItem = urlArray[i];
var item = urlItem.split("=");
urlObject[item[0]] = item[1];
}
return urlObject; }
return null;
}

22、寫一個 function,清除字串前后的空格,(兼容所有 瀏覽器)

//使用自帶介面 trim(),考慮兼容性:
if (!String.prototype.trim) {
String.prototype.trim = function() {
return this.replace(/^\s+/, "").replace(/\s+$/,"");
}
}
// test the function
var str = " \t\n test string ".trim(); alert(str == "test string"); // alerts "true"

23、判斷一個字串中出現次數最多的字符,統計這個次數

 var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i < str.length; i++) {
if(!json[str.charAt(i)]){ json[str.charAt(i)] = 1;
}else{ json[str.charAt(i)]++;
} };
var iMax = 0; var iIndex = ''; for(var i in json){
if(json[i]>iMax){ iMax = json[i]; iIndex = i;}}
alert('出現次數最多的是:'+ iIndex + '出現'+ iMax +'次')

24、Split()和 join()的區別?

Split()是把一串字符(根據某個分隔符)分成若干個元素存放在一個陣列里 即切割成陣列的形式;
join() 是把陣列中的字串連成一個長串,可以大體上認為是 Split()的逆操作

25、js 陣列去重,能用幾種方法實作?

1、使用 es6 set 方法 [...new Set(arr)] let arr = [1,2,3,4,3,2,3,4,6,7,6]; 
let unique = (arr)=> [...new Set(arr)]; 
unique(arr);//[1, 2, 3, 4, 6, 7]
2、利用新陣列 indexOf 查找 indexOf() 方法可回傳某個指定的元素在陣列中首次出現的位置, 如果沒有就回傳-13for 雙重回圈 通過判斷第二層回圈,去重的陣列中是否含有該元素,如果有就退出第二層回圈,如果沒有 j==result.length 就相等,然后把對應的元素添加到最后的陣列里面, 
let arr = [1,2,3,4,3,2,3,4,6,7,6]; 
let result = []; for(var i = 0 ; i< arr.length; i++) {
for(var j = 0 ; j < result.length ; j++)
 { if( arr[i] === result[j]){
break;};};
if(j == result.length){
result.push(arr[i]); };};
console.log(result);
4、利用 for 嵌套 for,然后 splice 去重 functionunique(arr){ for(vari=0; i<arr.length;
i++){ for(varj=i+1; j<arr.length; j++){ if(arr[i]==arr[j]){ //第一個等同于第二個,splice 方法洗掉第二個 arr.splice(j,1); j--; } } } returnarr; }
5、利用 filter 
let arr = [1,2,3,4,3,2,3,4,6,7,6]; 
let unique = (arr) => {     
 return arr.filter((item,index) => { 
 return arr.indexOf(item) === index;
   }) }; unique(arr);
6let arr = [1,2,3,4,3,2,3,4,6,7,6]; 
let unique = (arr) => { return arr.filter((item,index) => {
return arr.indexOf(item) === index;
}) }; unique(arr);
7、利用 Map 資料結構去重 
let arr = [1,2,3,4,3,2,3,4,6,7,6]; 
let unique = (arr)=> { let seen = new Map();
return arr.filter((item) => {
return !seen.has(item) && seen.set(item,1);
});
}; unique(arr);

26、談談你對 Javascript 垃圾回識訓制的理解?

1、標記清除(mark and sweep)
這是 JavaScript 最常見的垃圾回收方式,當變數進入執行環境的時候,比如函式中宣告一個變數, 垃圾回收器將其標記為“進入環境”,當變數離開環境的時候(函式執行結束)將其標記為“離開 環境” 垃圾回收器會在運行的時候給存盤在記憶體中的所有變數加上標記,然后去掉環境中的變數以及被 環境中變數所參考的變數(閉包),在這些完成之后仍存在標記的就是要洗掉的變數了
2、參考計數(reference counting)
在低版本 IE 中經常會出現記憶體泄露,很多時候就是因為其采用參考計數方式進行垃圾回收,引 用計數的策略是跟蹤記錄每個值被使用的次數,當宣告了一個 變數并將一個參考型別賦值給該 變數的時候這個值的參考次數就加 1,如果該變數的值變成了另外一個,則這個值得參考次數減 1,當這個值的參考次數變為 0 的時 候,說明沒有變數在使用,這個值沒法被訪問了,因此可以 將其占用的空間回收,這樣垃圾回收器會在運行的時候清理掉參考次數為 0 的值占用的空間
在 IE 中雖然 JavaScript 物件通過標記清除的方式進行垃圾回收,但 BOM 與 DOM 物件卻是通過引 用計數回收垃圾的,也就是說只要涉及 BOM 及 DOM 就會出現回圈參考問題

27、js 如何處理防抖和節流?

在進行視窗的 resize、scroll,輸入框內容校驗等操作時,如果事件處理函式呼叫的頻率無限 制,會加重瀏覽器的負擔,導致用戶體驗非常糟糕
此時我們可以采用 debounce(防抖)和 throttle(節流)的方式來減少呼叫頻率,同時又不 影響實際效果
函式防抖: 函式防抖(debounce):當持續觸發事件時,一定時間段內沒有再觸發事件,事件處理函式 才會執行一次,如果設定的時間到來之前,又一次觸發了事件,就重新開始延時 如下,持續觸發 scroll 事件時,并不執行 handle 函式,當 1000 毫秒內沒有觸發 scroll 事件時, 才會延時觸發 scroll 事件

function debounce(fn, wait) {
var timeout = null;
return function() {
if(timeout !== null) clearTimeout(timeout); timeout = setTimeout(fn, wait);
} } // 處理函式 function handle() { console.log(Math.random()); }
// 滾動事件 
window.addEventListener('scroll', debounce(handle, 1000));

函式節流(throttle):當持續觸發事件時,保證一定時間段內只呼叫一次事件處理函式 節流通俗解釋就比如我們水龍頭放水,閥門一打開,水嘩嘩的往下流,秉著勤儉節約的優 良傳統美德,我們要把水龍頭關小點,最好是如我們心意按照一定規律在某個時間間隔內 一滴一滴的往下滴
如下,持續觸發 scroll 事件時,并不立即執行 handle 函式,每隔 1000 毫秒才會執行一次 handle 函式

var throttle =function(func, delay) {
var prev = Date.now(); return function() {
var context = this;
var args = arguments; var now = Date.now();
if (now - prev >= delay) { func.apply(context, args); prev = Date.now();
}
} }
function handle() {console.log(Math.random());} window.addEventListener('scroll', throttle(handle, 1000)); 

總結:
函式防抖:將幾次操作合并為一此操作進行,原理是維護一個計時器,規定在 delay 時間后 觸發函式,但是在 delay 時間內再次觸發的話,就會取消之前的計時器而重新設定,這樣一 來,只有最后一次操作能被觸發
函式節流:使得一定時間內只觸發一次函式,原理是通過判斷是否到達一定時間來觸發函 數
區別:
函式節流不管事件觸發有多頻繁,都會保證在規定時間內一定會執行一次真正的事件處理 函式,而函式防抖只是在最后一次事件后才觸發一次函式,比如在頁面的無限加載場景下, 我們需要用戶在滾動頁面時,每隔一段時間發一次Ajax 請求,而不是在用戶停下滾動頁面操作時才去請求資料,這樣的場景,就適合用節流 技術來實作

28、如何判斷 JavaScript 的資料型別?

JavaScript 資料型別一共有 7 種:
Undefined、Null、Boolean、String、Symbol、Number、Object
除了 Object 之外的 6 種屬于原始資料型別,有時,我們還會細分 Object 的型別,比如 Array, Function,Date,RegExp 等
判斷方法
1、typeof
typeof 可以用來區分除了 Null 型別以外的原始資料型別,物件型別的可以從普通物件里面 識別出函式:

typeof undefined // "undefined" typeof null // "object"
typeof 1 // "number"
typeof "1" // "string"
typeof Symbol() // "symbol" typeof function() {} // "function" typeof {} // "object"

問題一:typeof 不能識別 null,如何識別 null?
答案:如果想要判斷是否為 null,可以直接使用===全等運算子來判斷(或者使用下面的 Object.prototype.toString 方法):

 let a = null
a === null // true

問題二:typeof 作用于未定義的變數,會報錯嗎? 答案:不會報錯,回傳"undefined",
問題三:typeof Number(1)的回傳值是什么?
答案:“number”,注意 Number 和 String 作為普通函式呼叫的時候,是把引數轉化為相 應 的原始資料型別,也就是類似于做一個強制型別轉換的操作,而不是默認當做建構式 調 用,注意和 Array 區分,Array(…)等價于 new Array(…)

typeof Number(1) // "number" typeof String("1") // "string" Array(1, 2, 3)
// 等價于
new Array(1, 2, 3)

2、instanceof
instanceof 不能用于判斷原始資料型別的資料:

3 instanceof Number // false '3' instanceof String // false true instanceof Boolean // false

instanceof 可以用來判斷物件的型別:

var date = new Date()
date instanceof Date // true
var number = new Number() number instanceof Number // true var string = new String()
string instanceof String // true

需要注意的是,instanceof 的結果并不一定是可靠的,因為在 ECMAScript7 規范中可以通 過自定義 Symbol.hasInstance 方法來覆寫默認行為,
3、Object.prototype.toString

 
Object.prototype.toString.call(undefined).slice(8, -1) // "Undefined"
Object.prototype.toString.call(null).slice(8, -1) // "Null"
Object.prototype.toString.call(3).slice(8, -1) // "Number" 
Object.prototype.toString.call(new Number(3)).slice(8, -1)//"Number"
Object.prototype.toString.call(true).slice(8, -1)//"Boolean" 
Object.prototype.toString.call('3').slice(8, -1) //"String" 
Object.prototype.toString.call(Symbol()).slice(8, -1) //"Symbol"

4、Array.isArray
Array.isArray(value)可以用來判斷 value 是否是陣列:

 
Array.isArray([]) // true
Array.isArray({}) // false
(function () {console.log(Array.isArray(arguments))}()) // false

29、創建物件有幾種方法

1、字面量物件 // 默認這個物件的原型鏈指向 object
var o1 = {name: ‘01’};
2、通過 new Object 宣告一個物件
var o11 = new Object({name: ‘011’});
3、使用顯式的建構式創建物件
var M = function(){this.name=‘o2’};
var o2 = new M();
o2.proto=== M.prototype
o2 的建構式是 M
o2 這個普通函式,是 M 這個建構式的實體
4、object.create()

var P = {name:'o3'};
var o3 = Object.create(P);

30、=== 和 ==的區別?

區別:
===: 三個等號我們稱為等同符,當等號兩邊的值為相同型別的時候,直接比較等號兩邊 的值,值相同則回傳 true,若等號兩邊的值型別不同時直接回傳 false,也就是說三個等號 既要判斷值也要判斷型別是否相等
==:兩個等號我們稱為等值符,當等號兩邊的值為相同型別時比較值是否相同,型別不同 時會發生型別的自動轉換,轉換為相同的型別后再作比較,也就是說兩個等號只要值相等就可以,

寫給看到最后的你

親愛的朋友,感謝你看到了最后,如果有技術不成熟的地方請多多指點,感謝!如果你覺得不錯,可以點贊+評論+關注任選哦,比心??????

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/303602.html

標籤:其他

上一篇:JavaScript 防抖和節流

下一篇:JavaScript基礎變數寫法/彈窗寫法

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more