JavaScript 中Object、Array 和 String的常用方法

下面是面试中向前端面试官介绍 JavaScript 中 ObjectArrayString 的常用方法,按逻辑分组展示,以展现你对标准库的熟练掌握与思考能力。


🗂️ 1. Object 常用方法

a. 结构与遍历

  • Object.keys(obj) → 返回属性名数组
  • Object.values(obj) → 返回属性值数组
  • Object.entries(obj) → 返回 [key, value] 键值对二元数组
  • Object.hasOwnProperty(prop) → 检查是否自身属性,过滤原型链属性 (FreeCodeCamp)
js 复制代码
const user = { name: "Alice", age: 25 };
console.log(Object.keys(user));       // ["name", "age"]
console.log(Object.entries(user));    // [["name","Alice"], ["age",25]]

b. 拷贝、冻结与类型判断

  • { ...obj }Object.assign({}, obj) 深拷贝顶层属性
  • Object.freeze(obj) + Object.isFrozen(obj) 防止修改 (FreeCodeCamp)
js 复制代码
const copy = { ...user };
Object.freeze(copy);
console.log(Object.isFrozen(copy));   // true

c. 动态操作

  • obj[key] = value 用于动态设置属性键名 (GeeksforGeeks)
js 复制代码
const dynamic = {};
const k = "score";
dynamic[k] = 42;

🔢 2. Array 常用方法

按用途可划分如下:

a. 访问与基本转换

  • .length → 数组长度
  • .at(index) → 支持负数索引(ES2022) (Medium)
js 复制代码
const arr = [10,20,30];
console.log(arr.at(-1)); // 30

b. 增删元素

  • .push(), .pop() 操作尾部元素
  • .unshift(), .shift() 操作头部元素 (W3Schools)

c. 拼接与切片

  • .concat() 合并数组
  • .slice() 提取子数组,不修改原数组
  • .splice() 在原数组插入或删除元素
  • .toSpliced()(ES2023):返回新数组不破坏原数组 (W3Schools)

d. 搜索定位

  • .indexOf(), .lastIndexOf() 查找元素索引
  • .includes() 检查是否存在
  • .find(), .findIndex() 支持回调函数条件 (W3Schools)

e. 映射、过滤、归约

  • .map(fn) → 新数组,每项为 fn 返回值
  • .filter(fn) → 新数组,保留 fn 为真的项
  • .reduce(fn, init) → 累计单值 (Medium, DEV Community)

f. 迭代与遍历

  • .forEach(fn) → 遍历每个元素执行 fn
  • .values(), .entries(), .keys() 返回遍历器对象 (Medium)


g. 排序、反转、扁平化

  • .sort() 默认按照字符串排序,自定义 fn 可按需排序
  • .reverse() 反转数组
  • .flat(depth), .flatMap(fn) 用于数组扁平化 (W3Schools)

✍️ 3. String 常用方法

  • .length → 字符串长度
  • .charAt(index) 或属性访问符 [index] 获取字符 (维基百科, 维基百科)
  • .toLowerCase(), .toUpperCase() 转换大小写
  • .trim(), .padStart(), .padEnd() 去除空格或填充
  • .includes(sub), .indexOf(sub), .lastIndexOf() 查找子串
  • .slice(start, end), .substring(start, end) 提取子串
  • .split(delimiter) 转为数组
  • .replace(pattern, repl) 替换
  • .match(regex), .search(regex) 正则功能
js 复制代码
const s = " Hello ";
console.log(s.trim().toUpperCase()); // "HELLO"

🎯 拓展:实用面试问答技巧


✅ 总结思路面试陈述建议

  1. 按类型分类:Object → Array → String,条理清晰
  2. 举常用场景:动态对象、数组去重、回文校验等
  3. 说明原生 vs 可变 vs 不可变 :如 splice vs toSpliced
  4. 兼顾 ES6+ 新特性 :如 .at().flatMap()new Set()
  5. 可补充性能/场景思考:如排序、数组遍历性能差异

这样结构化、实用性的分享方式,既展现了工具方法的掌握,也体现了你解决问题的思考力,一定能在面试中加分。如需进一步扩展到 Map/Set/Date/Promise 等,也欢迎继续聊 😊


下面是JavaScript 中 Object、Array、String 三个对象常用方法逻辑关系图(Mermaid) 和一个总结表格,方便向面试官清晰、有条理地介绍:


flowchart LR A[Object 方法] --> A1[Object.keys/values/entries] A --> A2[Object.assign / 展开运算] A --> A3[Object.freeze / isFrozen] A --> A4[动态属性 obj[key]] B[Array 方法] --> B1[访问 length, at()] B --> B2[增删 push, pop, shift, unshift] B --> B3[拼接切片 concat, slice, splice, toSpliced] B --> B4[搜索 includes, indexOf, find, findIndex] B --> B5[映射过滤 map, filter, reduce] B --> B6[遍历 forEach, keys/values/entries] B --> B7[排序 & 重构 sort, reverse, flat, flatMap] C[String 方法] --> C1[大小写转换 toLowerCase/UpperCase] C --> C2[裁剪 trim, padStart/ padEnd] C --> C3[查找 includes, indexOf, lastIndexOf] C --> C4[截取 slice, substring] C --> C5[替换 replace, 正则 match/search] C --> C6[分割 split] subgraph 核心思路 A B C end

📊 方法对比总结表

类别 方法举例 功能描述 注意点
Object Object.keys() / values() / entries() { ...obj }Object.assign() Object.freeze() obj[key] = value 属性遍历 浅拷贝/合并 不可变保护 动态键设置 展开仅浅拷贝;freeze 是浅层锁定
Array .length.at() push/pop/shift/unshift concat.slice.splice.toSpliced() includes/indexOf.find/findIndex map/filter/reduce forEach.values()sort/reverse/flat/flatMap 长度与索引访问 增删元素 拼接或提取 搜索定位 遍历与条件处理 映射/筛选/归约 排序/扁平化 splice 改原数组,toSpliced 返回新数组;sort 需注意默认字符串排序
String .lengthcharAt() toLowerCase()/toUpperCase() trim()padStart()padEnd() includes/indexOflastIndexOf() slice()substring() replace()、正则 .match() / .search() .split() 长度与字符访问 大小写转换 首尾操作 子串查找 子串提取 替换/正则匹配 字符串分割 replace 默认只替换首个,可用正则 /g 全局替换

🎯 面试介绍建议逻辑

  1. 按类型展开:从 Object → Array → String,清晰分段。

  2. 说明常见应用场景

    • Object:配置合并、遍历属性、冻结对象;
    • Array:数据处理、去重、分页、排序、聚合;
    • String:输入校验、格式化、模板渲染。
  3. 强调 ES6+ 新特性 :如 at(), .flatMap(), .toSpliced() 等。

  4. 区分可变/不可变方法:如 splice vs slice/toSpliced。

  5. 补充性能/使用建议:如 map/filter 比 forEach 更具函数式;熟悉正则方法应对复杂场景。


这种图加表格式,既展示了你对 API 的系统梳理,也体现出你考虑面试表达的严谨性。希望对你面试展示有用!如需扩展 Map/Set/Promise 等模块,也可以继续。

相关推荐
jiaway几秒前
【C语言】第一课 环境配置
c语言·开发语言
quan263110 分钟前
Vue实践篇-02,AI生成代码
前端·javascript·vue.js
小红帽2.042 分钟前
从零构建一款开源在线客服系统:我的Go语言实战之旅
开发语言·golang·开源
slim~43 分钟前
Java基础第9天总结(可变参数、Collections、斗地主)
java·开发语言
小桥风满袖1 小时前
极简三分钟ES6 - 类与继承
前端·javascript
子兮曰1 小时前
🚀99% 的前端把 reduce 用成了「高级 for 循环」—— 这 20 个骚操作让你一次看懂真正的「函数式折叠」
前端·javascript·typescript
wifi歪f1 小时前
📦 qiankun微前端接入实战
前端·javascript·面试
小桥风满袖1 小时前
极简三分钟ES6 - Symbol
前端·javascript
子兮曰1 小时前
🚀Map的20个神操作,90%的开发者浪费了它的潜力!最后的致命缺陷让你少熬3天夜!
前端·javascript·ecmascript 6
练习时长两年半的Java练习生(升级中)1 小时前
从0开始学习Java+AI知识点总结-30.前端web开发(JS+Vue+Ajax)
前端·javascript·vue.js·学习·web