你不知道的 JavaScript 小知识,我阿里P7了解到的前端面试的一些小内幕

38 阅读3分钟

最后

本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等

前端视频资料: 开源分享:docs.qq.com/doc/DSmRnRG…

  • 数字 NAN

其余的都是真

二、JS 中的字符串排序

===========================================================================

2.1 场景还原


现在有个列表是根据一个字段 a 来进行排序的,但是现在需求改了,需要使用字段 b 来排序。经过排查,发现字段 a 和 字段 b 均从服务端以 JSON 传递而来的。刚开始我还

2.2 基本用法:


JavaScript API

localeCompare

我们使用了 StringObject.localeCompare(target) 进行字符串排序

StringObject 比 target 小,则返回 小于 0 的数,反之

1.3 示例:


let str = ['2','1','3']

str.sort((a,b) => {

return a.localeCompare.b;

})

得到

['1','2','3']

三、js 通过删除数组中指定的元素

================================================================================

这里一般用于后台管理系统删除元素,通过 ajax 删除实现

deleteLink (id) {

let arr = this.page.list // 获取得到的数组

arr.forEach((item, index, res) => {

if (item.linkId == id) {

res.splice(index,1) // 修改返回的新数组,res 会赋值给 this.page.list

}

})

}

四、获取对象值的两种方式

===========================================================================

let user = {

name: "Gorit",

age: 18

}

user["name"] = Gorit

user.age =18

五、给基础数据类型扩展类型功能

==============================================================================

关键词

  • 原型链

  • 正则表达式

以下在 Node.js 环境中进行测试

  • 基于 JavaScript 原型链继承动态本质,新增的方法会被赋予到所有的对象实例上

  • 扩展类型的功能,给 JavaScript 的基本类型增加额外的功能。我们只需要通过 Object.prototype 添加方法,即可对函数、数组、字符串、数字、正则表达式和 布尔表达式同样适用

// 一个小技巧,通过给 Function.prototype 添加 method 方法,下次给对象添加方法就不必输入 prototype了

Function.prototype.method = function(name, func) {

// 为防止和其他公共的类库混用,符合条件时才增加

if (!this.prototype[name]) {

this.prototype[name] = func;

}

return this;

}

使用示例:

/**

  • JavaScript 没有提供处理 整数的函数,我们给 Number.prototype 增加一个 integer 方法。根据数字正负来判断 Math.ceiling 还是 Math.floor

  • 小于 0 向上取整,大于 0 向下取整

  • 不能用箭头函数

*/

Number.method('integer',function() {

return Maththis < 0 ? 'ceil' : 'floor';

})

console.log((-10 / 3).integer()); // -3

/**

  • JavaScript 缺少一个移除字符串首尾空白的方法,这个小疏忽比较容易弥补

  • 正则表达式 \s是指空白,包括空格、换行、tab缩进等所有的空白 \S 相反

  • / ... / 正则表达式包裹

  • \s+ 表示任意多个

  • | 表示两边随机选一个

  • ^ 从头开始匹配

  • $ 匹配到结尾

  • g 表示适配所有可能的情况

*/

// 算法题:实现字符串的 trim() 方法

String.method('trim', function() {

return this.replace(/^\s+|\s+$/g, '');

})

console.log(" dwdwd ".trim()); // Node 环境使用

// document.write(" dwdwd ".trim()) HTML 中使用

六、递归解决汉诺塔问题

==========================================================================

汉诺塔问题不清楚的同学可以去4399 小游戏上体验一下,实现代码如下:

// count 表示盘子数量

let hanio = (count, src, aux, dst) => {

if (count <= 0) return;

hanio ( count - 1, src , dst , aux);

console.log ('Move disc ' + count + ' from ' + src + ' to ' + dst);

hanio( count - 1, aux, src , dst);

};

hanio(2, 'A', 'B', 'C');

在这里插入图片描述

七、闭包

===================================================================

/**

  • 闭包

  • js 函数内部可以读取全局变量,外部无法读取函数内部的局部变量

*/

let n = 1000;

function f1 () {

console.log(n);

}

function f2 () {

let y = 999;

}

f1()

f2() // y 未定义

// 如何从外部读取局部变量?在函数内部再定义一个函数

// js 的链式作用,父级元素对子集是可见的,反之不行

function f3 () {

let t = 1001;

function f4 () {

最后

基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】