js题1-50

2022/1/7 面试题

# 1.手写stringify

# 2.深浅拷贝

# 3.事件轮询

# 4.手写instanceof

# 5.对象flatten扁平化

# 6.手写模板字符串

解析过程

  • 取出模板字符串
'我叫${name},我喜欢看${books[1]},我爸是${parents.father}'
->
'name'
'books[1]'
'parents.father'
1
2
3
4
5
  • 全部换成 . 式写法
'name'
'books[1]'
'parents.father'
-> 
'name'
'books.1'
'parents.father'
1
2
3
4
5
6
7
  • split变成属性的链式数组
'name'
'books.1'
'parents.father'
->
['name']
['books', '1']
['parents', 'father']
1
2
3
4
5
6
7
  • 用reduce拿到obj身上最终要展示的属性
obj['name']
obj['books']['1']
obj['parents']['father']
->
'西瓜皮儿'
'蝴蝶书'
'西瓜'
1
2
3
4
5
6
7
  • replace替换掉字符串
'我叫${name},我喜欢看${books[1]},我爸是${parents.father}'
->
'我叫西瓜皮儿,我喜欢看js蝴蝶书,我爸是西瓜'
1
2
3

# 7.简易promise

# 8.手写filter/reduce

# 9.防抖/节流

# 10.百度搜索原理

# 11.连环log

# 12.先发后置

# 13.手写bind/call/apply

# 14.this

# 15.手写require

# 16.es6模块化原理

# 17.事件代理

# 18.手写EventTarget

# 19.每天自动问好

# 20.手写promise.all

# 21.promise.race

# 22.Array(100).map(x => 1)

  • Array(n)会创建一个稀疏数组,稀疏数组内含非真实元素,在控制台上将以 empty 显示
console.log(Array(100).map(x => 1)); // [ <100 empty items> ]

console.log(Array(100).fill(null).map(x => 1)); // [1, 1, ....]

console.log(Array.from(Array(100), x => 1)); // [1, 1, ....]
1
2
3
4
5

# 23.类数组转化数组

<body>
    <div></div>
    <div></div>
    <div></div>
    <script>
        const divs = document.querySelectorAll('div');
        console.log(divs);

        console.log([...divs]);
        console.log(Array.from(divs));
        console.log(Array.prototype.slice.call(divs));
    </script>
</body>
1
2
3
4
5
6
7
8
9
10
11
12
13

# 24.将数组转化成Iterator对象

const arr = [1, 2, 3];

const iterator = arr[Symbol.iterator]();
console.log(iterator);
1
2
3
4

# 25.js实现继承

function A() {
    this.name = 'hdy';
}
function B(...args) {
    A.call(this, ...args)
    this.age = 18;
}
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;

const b = new B();
console.log(b); // B { name: 'hdy', age: 18 }
1
2
3
4
5
6
7
8
9
10
11
12

# 26.once函数

# 27.无限累加的sum函数

# 28.解析queryString

# 29.随机抽数组

# 30.监听复制事件

# 31.翻转字符串

const str = 'abcdefg ';
console.log(reverse(str)); // ' gfedcba'
1
2
const reverse = str => str.split('').reverse().join('');
1
const reverse = str => [...str].reverse().join('');
1
const reverse = str => [...str].reduceRight((pre, item) => pre + item, '');
1

# 32.文件上传

# 33.过滤falsy value

  • falsy: false, null, 0, "", undefined, NaN
const filterFalsy = (arr) => arr.filter(Boolean);
1

# 33.洗牌函数

# 34.辅助触发事件

# 35.取消http请求

# 36.递归爆栈解决

# 37.手写render函数

# 38.监听页面离开

# 39.执行环境、调用栈、作用域、上下文、闭包

# 40.闭包连续和

# 41.正则1

# 42.不使用运算符计算

# 43.await赋值时机

# 44.parseInt入参陷阱

# 45.in操作符

# 46.this查找

# 47.判断类型

# 48.柯里化累加器

# 49.JS常见的设计模式

# 50.finally执行时机

上次更新: 9/17/2024