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版本符号
字节跳动最爱考的前端面试题:JavaScript 基础, CSS 基础, 计算机网络基础
字节跳动最爱考的前端面试题:JavaScript 基础_指尖泛出的繁华-CSDN博客
字节跳动最爱考的前端面试题:CSS 基础_pig_html的博客-CSDN博客
字节跳动最爱考的前端面试题:计算机网络基础_趣谈前端-CSDN博客
一个合格(优秀)的前端都应该阅读这些文章:
「中高级前端面试」JavaScript手写代码无敌秘籍:
「中高级前端面试」JavaScript手写代码无敌秘籍 - 掘金
手写源码实现方案:一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧
:一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧 - 掘金
一名【合格】前端工程师的自检清单:
浏览器的回流与重绘 (Reflow & Repaint):
浏览器的回流与重绘 (Reflow & Repaint) - 掘金
深入浅出浏览器渲染原理:
理解http浏览器的协商缓存和强制缓存:
理解http浏览器的协商缓存和强制缓存 - 龙恩0707 - 博客园
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学习:
vscode总结:
第一次使用VS Code时你应该知道的一切配置 - 千古壹号 - 博客园
vscode使用教程: VSCode 版本管理|极客教程
常用的10种算法:
深入浅出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)
}