前端面试必考八股文之——js系列(1)

1,103 阅读4分钟

前言

前几篇文章给大家介绍了css的一些考点,相信大家看完之后都会有一种醍醐灌顶的感觉,js同样也是八股文中的高频考察范围之一,接下来的几篇文章会给大家分享一些js的内容,希望对大家有所帮助。
前端面试必考八股文之——css系列(1)
当面试官问你如何实现分栏布局,我是这么回答的
前端面试必考八股文之——css系列(2)

1. js数组上面有哪些方法?

这道题相信很多人肯定都能回答出来,但是不一定能回答的全,所以要有规律的去记忆,这些方法都比较常见,就不一一去介绍了。

    1. 增加:unshift push concat splice
    1. 删除:pop shift splice slice
    1. :reverse sort
    1. :indexOf lastIndexOf includes find
    1. 转换:join
    1. 迭代:forEach(不是数组独有的,Set和Map也有)map filter some every
    1. 构造函数上的方法:Array.from()

2. 字符串上有哪些方法

这道题和上面那题一样,也是按照一定的规律去记忆,这样就不容易落下。

    1. :concat
    1. :slice substring substr
    1. :replace trimRight trimLeft trim padStart padEnd toUpperCase toLowerCase
    1. : indeOf includes lastIndexOf find endsWith startsWith
    1. 转换: 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等,希望对大家有所帮助