javascript面试题

19. JS中的宿主对象与原生对象有何不同?

宿主对象:这些是运行环境提供的对象。这意味着它们在不同的环境下是不同的。例如,浏览器包含像windows这样的对象,但是Node.js环境提供像Node List这样的对象。

原生对象:这些是JS中的内置对象。它们也被称为全局对象,因为如果使用JS,内置对象不受是运行环境影响。

2. undefined,null 和 undeclared 有什么区别?

a、null表示"没有对象",即该处不应该有值,转为数值时为0。典型用法是:作为函数的参数,表示该函数的参数不是对象。作 为对象原型链的终点。
b、undefined表示"缺少值",就是此处应该有一个值,但是还没有定义,转为数值时为NaN。典型用法是:变量被声明了,但没 有赋值时,就等于undefined。调用函数时,应该提供的参数没有提供,该参数等于undefined。对象没有赋值的属性,该属性的 值为undefined。函数没有返回值时,默认返回undefined。
c、undeclared:js语法错误,没有申明直接使用,js无法找到对应的上下文。

3.数组去重?

4.数据扁平化处理?

总结:如何通过HR面 · 前端进阶指南与面试(持续更新) · 看云

前端100道题:第 2 题:['1', '2', '3'].map(parseInt) what & why ? | 木易杨前端进阶 001.数组扁平化并去重排序 · 每天一道面试题 · 看云

手写代码:

https://juejin.cn/post/6844903809206976520#heading-18 一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧 - 掘金

call、apply、bind方法分析及应用:

关于Js中call、apply、bind方法分析及应用 - 小白可别不举铁 - 博客园

NPM包版本的符号意义:

NPM包版本的符号意义_bestcjt的博客-CSDN博客_npm版本符号

npm 依赖版本符号 - 赵大树 - 博客园

字节跳动最爱考的前端面试题:JavaScript 基础, CSS 基础, 计算机网络基础

字节跳动最爱考的前端面试题:JavaScript 基础_指尖泛出的繁华-CSDN博客

字节跳动最爱考的前端面试题:CSS 基础_pig_html的博客-CSDN博客

字节跳动最爱考的前端面试题:计算机网络基础_趣谈前端-CSDN博客

一个合格(优秀)的前端都应该阅读这些文章:

一个合格(优秀)的前端都应该阅读这些文章 - 掘金

「中高级前端面试」JavaScript手写代码无敌秘籍:

「中高级前端面试」JavaScript手写代码无敌秘籍 - 掘金

手写源码实现方案:一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧

一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧 - 掘金

一名【合格】前端工程师的自检清单:

一名【合格】前端工程师的自检清单 - 掘金

浏览器的回流与重绘 (Reflow & Repaint):

浏览器的回流与重绘 (Reflow & Repaint) - 掘金

深入浅出浏览器渲染原理:

浏览器渲染原理 - 简书

理解http浏览器的协商缓存和强制缓存:

理解http浏览器的协商缓存和强制缓存 - 龙恩0707 - 博客园

0015.协商缓存和强缓存 · 每天一道面试题 · 看云

https://blog.csdn.net/qq_41831345/article/details/104637703?spm=1001.2014.3001.5501

WebSocket:

HTML5 WebSocket 权威指南 学习一 (第二章 WebSocket API) - 我是天才啊 - 博客园

WebSocket 解读及实现_独泪了无痕-CSDN博客_websocket

Webpack原理:

https://www.jianshu.com/p/53f370cc8c59

当面试官问Webpack的时候他想知道什么

https://blog.csdn.net/weixin_46837985/article/details/115774953

webpack4中hash、chunkhash和contenthash三者的区别

https://blog.csdn.net/bubbling_coding/article/details/81561362

webpack中loader和plugin的区别

https://www.jianshu.com/p/e1dc71396012

关于webpack常见的题目

https://www.jianshu.com/p/2c7484660b2d

git学习:

天天造轮子 - Git详解 - 掘金

vscode总结:

第一次使用VS Code时你应该知道的一切配置 - 千古壹号 - 博客园

vscode使用教程: VSCode 版本管理|极客教程

常用的10种算法:

1.0 十大经典排序算法 | 菜鸟教程

深入浅出nodejs读书:

https://tw93.github.io/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html

前端必看书籍:

前端必备javascript书籍测评【含红宝书和绿皮书】 - 掘金

Event Loop

 一次弄懂Event Loop(彻底解决此类面试问题) - 掘金

JavaScript 运行机制详解:再谈Event Loop - 阮一峰的网络日志

深入理解js事件循环机制(浏览器篇) - lynnelv's blog

细说JS异步发展历程:

细说JS异步发展历程_Yvette Lau的专栏-CSDN博客

异步操作概述 -- JavaScript 标准参考教程(alpha)

JavaScript中的回调函数(callback) - 简书

Promise不会??看这里!!!史上最通俗易懂的Promise!!! - 掘金

调用堆栈 + 作用域闭包 + this全面解析 + 深拷贝原理 + 原型 + 高阶函数 + 节流防抖:

理解JavaScript 中的执行上下文和执行栈 | 木易杨前端进阶

1.冒泡排序:

let arr=[11,44,5,3,8,9,0,2,1]

function bubleSort(arr) {

let len=arr.length

for(let j=0;j<len;j++){

for(let i=0;i<len;i++){ // for (let i=0;i<len-j;i++) { 优化

if (arr[i]>arr[i+1]){

[arr[i],arr[i+1]] = [arr[i+1],arr[i]]

}

}

}

return arr

}

console.log('bubleSort',bubleSort(arr))

2. 插入排序

function insertSort(arr) {

let len=arr.length

for(let i=0;i<len;i++){

for (let j=i;j>0;j--) {

if (arr[j]<arr[j-1]) {

[arr[j-1],arr[j]] =[arr[j],arr[j-1]]

} else {

break;

}

}

}

return arr

}

console.log('insertSort',insertSort(arr))

3.快排

function quickSort(arr) {

if (arr.length<=1){

return arr

}

let left=[]

let right=[]

let flag=arr.shift()

for (let i=0;i<arr.length;i++) {

if (arr[i]<flag) {

left.push(arr[i])

} else {

right.push(arr[i])

}

}

return quickSort(left).concat(flag, quickSort(right))

}

console.log('quickSort',quickSort(arr))

// 原地快排

function quickSort1(arr, low=0,hight=arr.length-1) {

if (low>hight) return

let left=low

let right=hight

let temp=arr[left]

while (left<right ) {

if ( left<right && temp <=arr[right]) {

right--

}

arr[left]=arr[right]

if (left < right && temp>arr[left]) {

left ++

}

arr[right] = arr[left]

}

arr[left] = temp

quickSort1(arr,low, left-1)

quickSort1(arr,left+1, hight)

return arr

}

console.log('quickSort',quickSort1(arr))

数字打平

Array.prototype.flat=function (arr) {

var arr=[]

this.forEach((item, index) => {

if (Array.isArray(item)) {

arr = arr.concat(item.flat())

}else {

arr.push(item)

}

});

return arr

}
function fib(n) {

if (n== 1||n==2 ) return 1

return fib(n-1) + fib(n-2)

}

// 提升计算速度

function fib3(n){

let dp = []

dp[1] = dp[2] = 1

for (let i = 3; i <=n; i++) {

dp[i] = dp[i - 1] + dp[i - 2];

}

return dp[n]

}

console.log(fib3(1000))

策略模式

let statge ={

'S': salary=> salary * 4,

'A': salary=> salary * 6,

'B': salary=> salary * 8,

}

var caculate = function (leve, salary) {

return statge[leve](salary)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值