一行代码反转字符串,却暴露了 JS 包装类的神秘行为!

425 阅读2分钟

字符串反转是面试中的经典问题之一,比如腾讯的一道常见考题:

将字符串"hello"反转输出为"olleh”

本文将通过这个简单问题,带你深入了解 JavaScript 字符串、数组、包装类等知识点,并逐步解析其背后的运行机制。


✨ 字符串反转的简洁写法

const reverseString = (str) => str.split('').reverse().join('');
console.log(reverseString('hello')); // 输出:'olleh'

拆解步骤:

  • str.split(''):将字符串拆成字符数组

  • .reverse():将字符数组反转

  • .join(''):再拼接成字符串 这是一种函数式编程风格,代码短小而优雅。


❓ 原始类型字符串能调用方法?

let a = "hello";
console.log(a.split('')); // ['h', 'e', 'l', 'l', 'o']

字符串是原始类型(Primitive),你可能会疑惑:

💬 为啥原始类型也能调用.split() .length等方法?

这是因为 JS 提供了包装类机制(Wrapper Objects)


🔍 包装类的“背后魔法”

let a = "abc";
let b = new String("abc");

console.log(a == b);  // true:值相等
console.log(a === b); // false:类型不同
变量类型说明
a字符串原始类型
b对象String 对象

背后发生了什么?

a.split('')

JS 实际执行流程:

  1. 临时将原始类型转为对象new String(a)
  2. 执行对象方法.split()
  3. 销毁临时对象,回归为原始类型

🔁 所以,JS 统一了原始类型与对象的操作方式


🔧 函数写法的演进过程

✅ ES5:函数表达式

const reverseString = function(str) {
  return str.split('').reverse().join('');
};

✅ ES6:箭头函数(Arrow Function)

const reverseString = (str) => str.split('').reverse().join('');

如果函数体只有一行,且返回一个值:

  • 可以省略function
  • 可以省略大括号{}
  • 可以省略return

这就是箭头函数语法糖的魅力!


💬 模板字符串(Template Literal)

ES6 还引入了模板字符串,更方便的拼接写法:

let str2 = "world";
const str4 = `hello ${str2}`;
console.log(str4); // 输出:hello world

对比传统写法:

"hello" + str2

模板字符串更直观、可读性更强。


✅ 总结:你学会了什么?

通过一个字符串反转的例子,我们了解了 JS 中非常重要的几个知识点:

  • ✅ 字符串和数组的常用方法:split()reverse()join()
  • ✅ 原始类型的“包装类”原理(自动封装成对象)
  • ✅ 箭头函数的简写方式
  • ✅ 模板字符串(Template Literal)
  • ===== 的区别

🙋‍♂️ 如果本文对你有帮助,欢迎点赞 👍 收藏 ⭐ 关注 🔔 支持一下~