JavaScript面試 題

1.延時加載JS有哪些方式

延時加載 :async defer
例如:<script defer type="type/javascript" src='script.js'></ script>
defer:等html全部解析完成,才會執行js代碼,順次執行的
async:  js和html解析是同步的,不是順次執行js腳本(誰先加載完先執行誰)

2.JS數據類型有哪些

基本類型:string,number,boolean,undefined,null,symbol,bigint
引用類型:object
NaN是一個數值類型,但不是一個具體的數字null和undefined的區別
null會被隱式轉換為0,很不容易發現錯誤
為了彌補null的坑所以出現了unfefined 
null是bject類型,undefined是undefined類型
undefined表示變量未初始化或屬性不存在
null 表示明確的無或空值==和===的區別
==比較的是值
===除了比較值還比較類型

3.JS微任務和宏任務

JS是單線程的 ,同一時間只能執行一個任務
JS代碼執行流程:同步執行完 ==》事件循環
事件循環 【微任務,宏任務】微任務:promise.then宏任務:setTimeout..要執行宏任務的前提是清空了所有的微任務
同步的任務都執行完了,才會執行事件循環的內容
進入事件循環:請求,定時器,事件...總體流程:
同步 ==》 事件循環 【微任務和宏任務】 ==》 微任務 ==》 宏任務

4.JS作用域

除了函數外,JS是沒有塊級作用域的
作用域鏈:內部可以訪問外部的變量,但是外部不能訪問內部的變量注意:如果內部有,優先查找到內部,如果內部沒有就查找外部的,一層一層往外找。var a =b =10 ==> var a= window.b = 10前面沒有類型 默認是window
JS有變量提升機制(變量懸掛聲明)
聲明變量的優先級是大于聲明普通函數的------
console.log(str) ? undefined
var str ="你好"
--------------
var name = 'a'
(function(){
if(typeof name =='undefined'){var name = 'b'console.log('111'+name)          --> √
}else{console.log('222'+name)}
})
? 111b 因為內部已經有了name 
--------------
console.log(c) ==>undefined (變量提升)
if(false){var c= 10
}
console.log(c) ==>undefined (變量提升)
--------------
var bar=1
function test(){
console.log(bar) ? undefined
var bar = 2;
console.log(bar) ==>2
}
-------

5.JS對象考題

對象是通過new操作符構建出來的,所以對象之間不相等 (除了引用外)
[1,2,3] === [1,2,3]  ==>false
對象的key都是字符串類型var a ={}
var b =
key :'aa'
}
var c = {
key:'c'
}
a[b]='123'  =>給a添加了 [Object Object]:123 
a[c]='456'  =>重新賦值 a.[Object Object] =456
console.log(a[b]) =>456
對象如何查找屬性
查找規則: 先在對象本身 ==》構造函數 ==》對象原型 ==》構造函數原型找 ==》對象上一層原型每個函數都自帶一個prototype【原型】對象擁有 __proto__
new Fun 該Fun構造函數的原型指向于(new Fun)的原型new的函數 this執行new
否則指向window

在這里插入圖片描述
在這里插入圖片描述

6.判斷是不是數組有哪些方法


1.isArrayvar arr = [1,2,3];console.log(Array.isArray(arr)) true2.instanceofvar arr = [1,2,3]console.log(arr instanceof Array) true3.通過原型var arr = [1,2,3]console.log(Object.protorype.toString.call(arr).indexOf('Array')!==-1)4.isProtorypeOf()console.log(Array.prototype.isPrototypeOf(arr))5.construct console.log(arr.constructor.toString().indexOf('Array'))

9.關于slice 和 splice

1.slice是用來截取的參數可以寫slice(3),slice(1,3),slice(-3)返回的是一個新的數組
2.splice功能:插入,刪除,替換會改變原數組splice(從哪開始,刪幾個元素,'插入的元素')
let removed = arr.splice(2,2) //從索引2開始,刪除2個元素
arr.splice(2,0,"apple","orange") 從索引2開始添加兩個元素
arr.splice(2,2,"apple","orange")從索引2開始替換兩個元素

10.關于數組去重

方式一:new set
var arr1 = [1,2,3,1,2,3]
function unique(arr){return [...new Set(arr)]
}
console.log(unique(arr1))
方式二:indexOf
var arr2 = [1,2,3,1,2,3]
function unique(arr){var brr = [];for(var i =0;i<arr.length;i++){if(brr.indexOf(arr[i])==-1){brr.push(arr[i])}}return brr
}

11.new操作符具體做了什么

1.創建一個空的對象
2.將空對象的原型,指向于構造函數的原型
3.將空對象作為構造的上下文(改變this指向)
4.對構造函數有返回值的處理判斷(如果返回的是基本類型 則忽略 如果是引用類型則返回)
function Fun(age,name){this.age=age;this.name=name;
}
function create(fn,...args){
//創建一個空對象
var obj = {};
//將對象的原型指向構造函數的原型
Object.setProtorypeOf(obj,fn.prototype)
//將空對象作為構造函數的上下文
var result = fn.apply(obj,args)
return result instanceof Object >result:obj
}
console.log(create(Fun,18,'張三'))

12.關于閉包

1.閉包是什么
閉包是一個函數加上到創建函數的作用域的鏈接,閉包 關閉了 函數的自由變量 
2.閉包可以解決什么問題內部函數可以訪問到外部函數的局部變量閉包可以解決的問題var lis = document.getElementsByTagName('li')for(vat i = 0;i<lis.length;i++){(function(i){lis[i].onclick = function(){alert(i)}})(i)}
閉包的缺點變量會駐留在內存中,造成內存損耗的問題解決:把閉包的函數設置為空內存泄漏(ie)

13.原型鏈

原型可以解決什么問題: 對象共享屬性和方法
誰有原型:
函數擁有:prototype
對象擁有:__proto__
對象查找屬性或方法的順序
現在對象本身查找->構造函數中查找->對象的原型->構造函數的原型

14.JS的繼承有哪些方式

方式一:ES6

class Parent{
constructor(){this.age = 18}
}
class Child extends Parent {constructor(){super();this.name='張三'}
}
let o1 = new Child()
console.log(o1,o1,name,o1,age)

方式二:原型鏈繼承

function Parent(){
this.age = 20
}
function Child () {
this.name = '張三'
}
Child.prototype = new Parent();
let o2 = new Child();
console.log(o2,o2.name,o2.age)

方式三:借用構造函數繼承

function Parent(){
this.age = 12 
}
function Child(){
this.name = '張三'
Parent.call(this)
}
let o1 = new Child()
console.log(o1,o1.name,o1,age)

15.clal apply bind的區別

可以改變指向
語法:函數.call , 函數.apply ,函數.bind
區別:call apply可以立即執行,bind不會立即執行,因為bind返回的是一個函數需要加()執行
后面的參數是傳遞的參數
apply第二個參數是數組,call和bind有多個參數需要挨個寫

16.深拷貝和淺拷貝

淺拷貝:只復制應用 不復制值 地址是一樣的
深拷貝:是復制真正的值 兩個地址 遞歸
function copyObj (obj){
if(Array.isArray(obj)){
var newObj = []
}
var newObj = {}
for(var key in obj){
if(typeof obj[key] ==='object'){
newObj[key]=copyObj(obj[key])
}else{
newObj[key]=obj[key]
}}
return newObj
}

17.localStorage sessionStorage cookie的區別

sessionStorage.setItem('key','123') :僅在當前瀏覽器窗口關閉
之前有效 【關閉了瀏覽器之后就沒了】localStorage.setItem('key','123'): 始終有效 窗口或者瀏覽器
關閉也有效,所以叫持久化存儲cookie:
var data = new Data()
vat time = 3600*60*60*24
time =data.getTIme() +time
data.setTime(time)
documment.cookie = 'key=789;expires = ' +data.toUTSCtring()+''   //設置過期時間存儲大小限制:cookie 不能超過4K
localStorage,sessionStorage不能超過5M

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17923.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17923.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17923.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++】菱形繼承、菱形虛擬繼承、繼承與組合

目錄 01.概念 02.虛擬繼承 原理 03.繼承和組合 01.概念 單繼承&#xff1a; 一個子類只有一個父類時&#xff0c;稱這種繼承關系為單繼承。 多繼承&#xff1a; 一個子類同時有兩個及以上的父類時&#xff0c;稱這種繼承關系為多繼承。 菱形繼承&#xff1a; 菱形繼承是…

一文搞懂oracle事務提交以及臟數據落盤的原則

本文基于oracle 19c 做事務提交以及oracle臟數據落盤的相關解讀 第一章 相關進程及組件介紹&#xff1a; 1.LGWR&#xff1a; 重做日志條目在系統全局區域 &#xff08;SGA&#xff09; 的重做日志緩沖區中生成。LGWR 按順序將重做日志條目寫入重做日志文件。如果數據庫具有…

【MySQL精通之路】MySQL的使用(3)-命令行連接

本節介紹使用命令行選項來指定如何為MySQL或mysqldump等客戶端建立到MySQL服務器的連接。 有關使用類似URI的連接字符串或鍵值對建立連接的信息&#xff0c;對于MySQL Shell等客戶端&#xff0c;請參閱“使用類似URI字符串或鍵值配對連接到服務器”。 有關無法連接的其他信息&a…

期望薪資26K,北京瘋狂游戲golang一面

北京瘋狂游戲一面 1、自我介紹 2、財務業務中&#xff0c;你做了哪些設計來保證金額數據的準確性&#xff1f;&#xff08;例如&#xff0c;業務涉及多步驟&#xff0c;某一步出了問題怎么解決&#xff09; 3、如何解決單個業務直接報錯的數據準確性問題 4、分布式場景下&a…

理解Vue 3響應式系統原理

title: 理解Vue 3響應式系統原理 date: 2024/5/28 15:44:47 updated: 2024/5/28 15:44:47 categories: 前端開發 tags: Vue3.xTypeScriptSFC優化Composition-APIRef&Reactive性能提升響應式原理 第一章&#xff1a;Vue 3簡介 1.1 Vue 3概述 Vue 3的誕生背景&#xff1…

怎么把電腦上的文件傳到手機上?可保存文檔的云筆記

在職場中&#xff0c;我們經常需要將電腦上的重要文件、資料傳到手機上&#xff0c;以便隨時查閱和使用。比如&#xff0c;當你在公司完成了一份關鍵報告&#xff0c;但即將外出與客戶溝通&#xff0c;這時如果能將報告傳到手機上&#xff0c;就能在移動中隨時準備應對客戶的咨…

uniapp Androud 離線打包升級APK,覆蓋安裝不更新問題

Android 打包時在assets/data/dcloud_control.xml文件中&#xff0c;如果配置debug"true" syncDebug"true"&#xff0c;則consle打印有效&#xff0c;不然沒有打印數據 <hbuilder debug"true" syncDebug"true"> <apps> …

破解App渠道歸因難題,Xinstall助你實現精準數據追蹤!

在移動互聯網時代&#xff0c;App的推廣和運營面臨著諸多挑戰。其中&#xff0c;渠道歸因問題一直困擾著眾多推廣者。如何準確追蹤用戶來源&#xff0c;分析不同渠道的推廣效果&#xff0c;成為了擺在推廣者面前的一大難題。然而&#xff0c;有了Xinstall的出現&#xff0c;這一…

C++網絡編程——實現一個簡單的echo服務器

在前面講完了服務器從建立套接字、綁定、監聽和提取&#xff0c;以及客戶端的連接&#xff0c;我們已經可以動手實現一個簡單的鏡像服務器。 錯誤處理 在那之前&#xff0c;我們先封裝一個錯誤處理函數 errif 可以定義一個uitl.cpp放里面&#xff0c;需要的地方引用即可 ut…

藍橋杯Web開發【大學組:國賽】2022年真題

1.分一分 如果給你一個數組&#xff0c;你能很快將它分割成指定長度的若干份嗎&#xff1f; 1.1 題目問題 請在 js/index.js 文件中補全函數 splitArray 中的代碼&#xff0c;最終返回按指定長度分割的數組。 具體要求如下&#xff1a; 將待分割的&#xff08;一維&#x…

云WAF如何適應動態變化的網絡安全威脅

云WAF&#xff08;Web Application Firewall&#xff09;是一種專門用于保護Web應用程序的安全系統&#xff0c;它能夠實時監測并分析網絡流量&#xff0c;一旦發現潛在攻擊行為立即進行阻斷&#xff0c;有效防止各類Web應用層攻擊。云WAF的適應性主要體現在以下幾個方面&#…

【Docker故障處理篇】運行容器報錯“docker: failed to register layer...file exists.”解決方法

【Docker故障處理篇】運行容器報錯“docker: failed to register layer...file exists.” 一、Docker環境介紹2.1 本次環境介紹2.2 本次實踐介紹二、故障現象2.1 運行容器消失2.2 重新運行容器報錯三、故障分析四、故障處理4.1 停止 Docker 服務:4.2 備份重要數據4.3 清理沖突…

從了解到掌握 Spark 計算框架(一)Spark 簡介與基礎概念

文章目錄 什么是 Spark&#xff1f;核心特點 Spark 對比 MapReduceSpark 編程模型RDDDataFrameDataset Spark 運行模式Spark 生態 什么是 Spark&#xff1f; Spark 是一個基于內存的分布式計算框架&#xff0c;最初由加州大學伯克利分校的 AMPLab 開發&#xff0c;后來捐贈給了…

go語言基準測試Benchmark 最佳實踐-冒泡排序和快速排序算法基準測試時間復雜度對比

在go語言中Benchmark基準測試( 在后綴為_test.go的文件中&#xff0c;函數原型為 func BenchmarkXxx(b *testing.B) {}的函數 )可以用來幫助我們發現代碼的性能和瓶頸&#xff0c; 其最佳實踐 應該是我們最常用的 冒泡排序和快速排序的測試了&#xff0c;廢話不說&#xff0c;直…

【MySQL精通之路】InnoDB(9)-表和頁壓縮(2)-頁壓縮

目錄 1.支持的平臺 2.頁面壓縮的工作原理 3.啟用頁面壓縮 4.禁用頁面壓縮 5.頁面壓縮-元數據 6.使用頁面壓縮識別表 7.頁面壓縮限制和使用說明 InnoDB支持對駐留在FPT表空間中的表進行頁面級壓縮。 此功能被稱為透明頁面壓縮。通過使用CREATE TABLE或ALTER TABLE指定COM…

項目9-網頁聊天室3(主界面之用戶信息)

1.前端頁面 CSS: 如何讓img里的圖片自適應div&#xff0c;且不變形_img自適應div大小 鋪滿且不變形-CSDN博客 JavaScript/jQuery 如何改變一個img元素的src屬性|極客教程 (geek-docs.com) 2.要求 左上角顯示用戶的昵稱和頭像. 3.后端代碼 3.1 添加攔截器 3.2 注冊攔截器 …

關于C++的類型轉換一篇搞掂

類型轉換 本篇主要探討C11的新出現的類型轉換方式 隱式類型轉換(意義相近的類型可轉換) 顯示類型轉換(意義不相近的類型需強制類型轉換) C為了加強類型轉換的可視性, 引入了四種命名強制類型轉換操作符 但同時也兼容了C語言之前的類型轉換和強制類型轉換, 只是提供了規范的轉…

go升級后 編譯的exe在win7上無法正常運行

D:/Go/src/runtime/sys_windows_amd64.s:65 x75 fpx22fca sp-0x22fc8日 升級到go 1.21后報一堆錯誤&#xff0c;要死了啊 原來是go 1.21不支持win7了&#xff0c;必須把go退回到1.20版本 谷歌發布編程語言 Go 1.21 版本&#xff1a;取消支持微軟 Win7/8 及蘋果 macOS 10.13/10…

pip install pytorch-quantization error

一 報錯信息 最近安裝pytorch-quantization報錯&#xff0c;安裝失敗報錯信息如下&#xff1a; Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com Collecting pytorch-quantizationDownloading pytorch-quantization-2.2.1.tar.gz (6.8 kB)Prepari…

Alibaba Cloud Linux 安裝docker

阿里云實例基于 Red Hat 的發行版&#xff08;例如 CentOS 或 Alibaba Cloud Linux&#xff09;。在這種情況下&#xff0c;應該使用 yum 或 dnf 包管理器&#xff0c;而不是 apt。以下是如何在 CentOS 或類似系統上安裝 Docker 的步驟&#xff1a; 1. 更新系統 首先&#xf…