JavaScript 基础应用篇|全套API + 遍历语法 + 面试高频考点

3 阅读5分钟

前言:JS 完整学习两条主线

  1. 底层原理篇:作用域、闭包、原型链、执行上下文、事件循环、this、异步、垃圾回收(面试深挖原理、看执行逻辑)

  2. 基础应用篇(本文) :内置API、数组/字符串/对象操作、遍历语法、数据结构、类型转换、深浅拷贝(笔试、项目、初级面试必考)

学习建议:基础API是一切的基石,先会用,再懂原理,面试才能做到无死角。

温馨提示:本文适合面试前突击、查漏补缺、系统梳理JS基础工具语法,全覆盖前端常用基础考点。

一、数组 全套高频API(面试 / 笔试 / 项目核心)

1.1 会改变原数组的方法(必背考点)

记忆口诀:增删改、反转、排序,全部改动原数组

  • push() :数组尾部追加元素,返回新数组长度
  • pop() :删除数组最后一项,返回被删除的元素
  • unshift() :数组头部添加元素,返回新数组长度
  • shift() :删除数组第一项,返回被删除的元素
  • splice(起始下标, 删除个数, 新增内容) :数组万能方法,可增、可删、可改
  • reverse() :数组反转,直接改变原数组
  • sort() :数组排序,默认字典排序,数字排序需要手动写回调函数

1.2 不会改变原数组的方法(返回新值/新数组)

这类方法支持链式调用,项目开发最常用,无副作用

  • slice(start, end) :截取数组,不包含结束下标,可用于数组浅拷贝
  • concat() :数组拼接,合并多个数组
  • join('分隔符') :数组转字符串
  • map() :映射遍历,一一对应返回新数组,支持链式调用
  • filter() :条件过滤,返回符合条件的新数组
  • reduce() :累加器,可实现求和、去重、统计、数组扁平化,万能迭代方法
  • forEach() :纯遍历,无返回值,不支持中断
  • find() :查找第一个符合条件的元素,找不到返回 undefined
  • findIndex() :查找第一个符合条件元素的下标,找不到返回 -1
  • every() :全部元素满足条件才返回 true,否则 false
  • some() :任意一个元素满足条件就返回 true
  • includes() :判断数组是否包含某元素,返回布尔值

1.3 数组面试高频问答

Q1:slice 和 splice 的核心区别?

slice 是截取方法,不改变原数组,常用于浅拷贝;splice 是增删改方法,直接修改原数组。

Q2:map 和 forEach 的区别?

map 有返回值,生成新数组,支持链式调用;forEach 无返回值,仅做单纯遍历。


二、字符串 常用核心API

字符串所有操作不会改变原字符串,只会返回新字符串

  • charAt(index) :获取指定下标的字符
  • substr(起始位置, 截取长度) :按长度截取
  • substring(起始, 结束) :按下标区间截取
  • slice() :字符串截取,支持负数参数
  • split('分隔符') :字符串转数组,项目超级常用
  • toUpperCase() / toLowerCase() :大小写转换
  • trim() :去除首尾空格
  • includes() :判断是否包含指定字符
  • startsWith() / endsWith() :判断开头、结尾是否匹配
  • replace() :替换字符,可结合正则全局替换

三、Math 数学常用API(笔试算法高频)

  • Math.floor() :向下取整
  • Math.ceil() :向上取整
  • Math.round() :四舍五入
  • Math.random() :生成 0~1 随机小数
  • Math.max() / Math.min() :获取最大值、最小值
  • Math.abs() :取绝对值
  • Math.pow(底数, 幂) :次方运算

四、对象 常用API

  • Object.keys() :获取对象所有键名,返回数组
  • Object.values() :获取对象所有值,返回数组
  • Object.entries() :获取键值对二维数组
  • Object.assign() :对象合并,属于浅拷贝
  • Object.freeze() :冻结对象,无法修改、新增、删除属性
  • hasOwnProperty() :判断是否为对象自身属性,不遍历原型链

五、JS 所有遍历语法(面试超级高频)

5.1 普通 for 循环

性能最优,支持 break、continue,适合遍历数组下标。

5.2 forEach 遍历

仅用于遍历,无返回值,不支持 break、continue

5.3 for...in(重点面试题)

专门遍历 对象键名

缺陷:会遍历原型链可枚举属性、无序、不适合遍历数组。

5.4 for...of(ES6 最优遍历)

遍历 ,支持所有可迭代对象:数组、字符串、Set、Map、伪数组。

支持 break、continue,解决 forEach 无法中断的问题。

缺点:不能遍历普通对象

5.5 面试标准问答:for in 和 for of 区别

  1. for in:遍历键名,主打对象,会遍历原型属性,不推荐数组使用;

  2. for of:遍历值,主打数组/可迭代对象,支持中断,性能更好,是ES6推荐遍历方式。


六、ES6 新增数据结构 Set / Map

6.1 Set(数组去重神器)

特性:元素唯一、无序、不重复

  • add():添加元素
  • delete():删除元素
  • has():判断元素是否存在
  • clear():清空集合
  • size:获取元素个数

经典用法:[...new Set(arr)] 一键数组去重

6.2 Map(灵活键值对)

普通对象 key 只能是字符串/Symbol;Map 的 key 可以是任意类型(数字、对象、数组)

  • set():设置键值对
  • get():获取值
  • has():判断键是否存在
  • delete():删除指定键值对
  • clear():清空

七、深浅拷贝(基础必考)

7.1 浅拷贝

只复制第一层数据,嵌套引用类型依旧共用同一内存地址,修改会互相影响。

常用方式:扩展运算符 ...、Object.assign、数组 slice、concat

7.2 深拷贝

递归复制所有层级,彻底切断引用关系,数据完全独立。

简单方案:JSON.parse(JSON.stringify(obj))

缺陷:无法拷贝函数、undefined、Symbol,会丢失部分数据;复杂场景需要手写递归深拷贝。


八、JS 隐式类型转换(笔试大坑)

面试常考 == 比较规则

  • 字符串 == 数字 → 字符串转数字再比较
  • 布尔值 == 任意值 → 布尔转数字(true=1,false=0)
  • null == undefined → true
  • null === undefined → false
  • 对象 == 基本类型 → 对象转为原始值再比较

开发规范:实际开发全部使用 === 严格相等,杜绝隐式转换带来的诡异bug。


九、文末总结

JS 基础应用层是所有前端开发的基石,重点掌握:各类API使用、是否修改原数据、遍历区别、深浅拷贝、类型转换规则

基础层侧重会用、熟练、不踩坑,原理层侧重读懂底层、看透执行逻辑,两者结合,才算真正吃透 JavaScript。