前言
前几篇文章给大家介绍了css的一些考点,相信大家看完之后都会有一种醍醐灌顶的感觉,js同样也是八股文中的高频考察范围之一,接下来的几篇文章会给大家分享一些js
的内容,希望对大家有所帮助。
前端面试必考八股文之——css系列(1)
当面试官问你如何实现分栏布局,我是这么回答的
前端面试必考八股文之——css系列(2)
1. js数组上面有哪些方法?
这道题相信很多人肯定都能回答出来,但是不一定能回答的全,所以要有规律的去记忆,这些方法都比较常见,就不一一去介绍了。
-
增加
:unshift push concat splice
-
删除
:pop shift splice slice
-
改
:reverse sort
-
查
:indexOf lastIndexOf includes find
-
转换
:join
-
迭代
:forEach(不是数组独有的,Set和Map也有)map filter some every
-
构造函数上的方法
:Array.from()
2. 字符串上有哪些方法
这道题和上面那题一样,也是按照一定的规律去记忆,这样就不容易落下。
-
增
:concat
-
删
:slice substring substr
-
改
:replace trimRight trimLeft trim padStart padEnd toUpperCase toLowerCase
-
查
: indeOf includes lastIndexOf find endsWith startsWith
-
转换
: split
let str = 'abc'
const str2 = str.concat('de')
// concat不改变原字符串,返回一个新的字符串
console.log(str); // abc
console.log(str2); // abcde
// substr删除到某一个下标
let str3 = str2.substr(3)
console.log(str3);
// substring只接一个参数时,和substr一样,接两个参数,就和slice一样
let str4 = str2.substring(3)
console.log(str4);
let Str = ' abc de '
// trim去掉首位的空格
console.log(Str.trim()); // abc de
console.log(Str.trimLeft()); // abc de
console.log(Str.trimRight()); // abc de
// padStart在字符串前面添加某个字符使其达到所传的长度
console.log(Str.padStart(10,'.')); // .. abc de
//endsWith用于检查一个字符串是否以另一个指定的字符串结尾
console.log(str.endsWith('bc')); // true
3. == 和 === 的区别
==
只判断值相等,类型不同就先进行隐式类型转换再判断值是否相等
===
既判断值相等也要判断类型是否相等
4. 谈谈js中的类型转换机制
- 是什么
js中有原始类型
和引用类型
:
原始类型
: number string symbol boolean undefined null BigInt
引用类型
: [] {} function Date Regexp(正则的构造函数) Set Map
通常开发过程中,会用到一些显示类型转换的手段来完成逻辑开发,比如:
各种原始数据类型的构造函数
和parseInt
parseInt
用于解析字符串并返回整数的函数。它接受两个参数,第一个参数是要解析的字符串,第二个参数是基数(即进制数)。如果不提供第二个参数,则 parseInt()
会尝试根据输入的字符串自动判断其进制。
let number1 = parseInt("10"); // 解析字符串 "10",返回整数 10
let number2 = parseInt("10", 16); // 解析十六进制字符串 "10",返回整数 16
在V8执行过程中还存在另一种类型转换 --- 隐式类型转换
通常发生在 比较运算符
和 算术运算符
==
===
!=
<
>
if
while
+
-
*
/
%
隐式类型的转换在之前的文章中讲过,这里就不再赘述: 跨过JS类型转换这座大山,原来这么简单
5. 解释一下 [] == ![] 为什么为 true
这是一道非常经典的面试题,要用到类型转换的知识和符号优先级的概念,下面给大家详细讲解一下
[] == ![]
步骤:
!优先级比 == 高,并且有!都会优先转成布尔
!不在比较运算符和算数运算符的范围里面,不会触发隐式类型转换
所以右边的[]就会直接转成布尔值,任何对象转布尔都为true
[] == !true
[] == false
==会触发隐式类型转换,就要按照隐式类型转换机制走
'' == false
==本身就是比较数值的,所以全部转换成number类型
0 == 0 返回true
结语
本篇文章给大家介绍了一些常见的js的面试题,不过这些都比较简单,之后还会给大家介绍一些稍微难点的面试题,比如手写深浅拷贝
、手写promise、proxy
等,希望对大家有所帮助