ES6函数新特性:让JavaScript编码更简单高效

更新日期: 2025-11-17 阅读: 65 标签: es6

以前用JavaScript写函数时,经常会遇到各种麻烦。参数默认值要手动判断,处理多个参数要用arguments,this指向问题让人头疼。ES6的出现解决了这些问题,给函数增加了许多实用功能,让代码写起来更快,也不容易出错。

下面用简单易懂的方式介绍这些新功能。


参数默认值:告别繁琐判断

以前给函数参数设置默认值,需要在函数内部写很多判断语句,既麻烦又容易出错。

ES5的传统写法:

function calculate(a, b) {
  a = a || 1;  // 这里有个问题:如果a是0,也会被替换成1
  b = b === undefined ? 2 : b;
  return a + b;
}

console.log(calculate(0, 5)); // 输出5,但0被错误地替换成了1

ES6的改进写法:

function calculate(a = 1, b = 2) {
  return a + b;
}

console.log(calculate());      // 输出3(使用默认值1和2)
console.log(calculate(5));     // 输出7(a=5,b使用默认值2)
console.log(calculate(0, 0));  // 输出0(正确识别0值)

ES6的默认参数只在参数为undefined时生效,传null或0都不会触发默认值,避免了ES5中的常见错误。


剩余参数:轻松处理多个参数

以前处理不确定数量的参数时,要用arguments对象,但它不是真正的数组,使用起来很麻烦。

ES5的arguments方式:

function sum() {
  // 先把arguments转换成真正的数组
  const numbers = Array.prototype.slice.call(arguments);
  return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3)); // 输出6

ES6的剩余参数写法:

function sum(...numbers) {
  return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4, 5)); // 输出15

剩余参数用三个点(...)表示,它会将传入的所有参数收集成一个真正的数组,可以直接使用数组方法。


扩展运算符:数组操作更便捷

扩展运算符看起来和剩余参数一样,但作用正好相反:它把数组拆分成单个元素。

常用场景示例:

// 1. 求数组最大值
const scores = [95, 87, 92, 78, 96];
console.log(Math.max(...scores)); // 输出96

// 2. 合并数组
const arr1 = [1, 2];
const arr2 = [3, 4];
const combined = [...arr1, ...arr2]; // [1, 2, 3, 4]

// 3. 复制数组
const original = [1, 2, 3];
const copy = [...original];

// 4. 函数传参
function introduce(name, age, city) {
  console.log(`${name}今年${age}岁,来自${city}`);
}
const person = ['张三', 25, '北京'];
introduce(...person); // 张三今年25岁,来自北京


箭头函数:简洁语法与稳定的this

箭头函数是ES6中最受欢迎的特性之一,不仅语法简洁,还解决了this指向的问题。

基本语法对比:

// ES5普通函数
const multiply = function(a, b) {
  return a * b;
};

// ES6箭头函数
const multiply = (a, b) => a * b;

解决this指向问题:

const user = {
  name: '李四',
  tasks: ['任务1', '任务2', '任务3'],
  
  // ES5写法:this指向会变化
  showTasks1: function() {
    this.tasks.forEach(function(task) {
      console.log(this.name + ': ' + task); // 这里this指向window
    });
  },
  
  // ES6箭头函数:this保持正确指向
  showTasks2: function() {
    this.tasks.forEach((task) => {
      console.log(this.name + ': ' + task); // 正确指向user对象
    });
  }
};

user.showTasks2(); // 正确输出:李四: 任务1 等

箭头函数的特点:

  • 语法简洁,可以省略function关键字和return

  • 没有自己的this,继承外层作用域的this

  • 不能作为构造函数使用

  • 没有arguments对象


参数解构:直接从参数中提取值

当函数参数是对象或数组时,可以直接在参数中解构出需要的属性。

对象参数解构:

// 传统写法
function displayUser(user) {
  const name = user.name;
  const age = user.age;
  const city = user.city || '未知';
  console.log(`${name},${age}岁,来自${city}`);
}

// ES6解构写法
function displayUser({ name, age, city = '未知' }) {
  console.log(`${name},${age}岁,来自${city}`);
}

displayUser({ name: '王五', age: 30 }); // 王五,30岁,来自未知

数组参数解构:

// 获取坐标点
function getCoordinates([x, y]) {
  return { x, y };
}

const point = getCoordinates([10, 20]);
console.log(point); // {x: 10, y: 20}


函数名属性改进:调试更方便

ES6改进了函数的name属性,让调试时能更清楚地识别函数。

// 普通函数
function normalFunction() {}
console.log(normalFunction.name); // "normalFunction"

// 箭头函数
const arrowFunc = () => {};
console.log(arrowFunc.name); // "arrowFunc"

// 匿名函数赋值
const anonymous = function() {};
console.log(anonymous.name); // "anonymous"(ES5中为空字符串)


实际应用示例

下面通过一个完整的例子展示这些特性的综合应用:

// 用户数据处理函数
function processUserData(
  { name, age, hobbies = [], address = {} } = {},
  ...otherInfo
) {
  // 参数默认值和解构一起使用
  const userInfo = {
    name: name || '匿名用户',
    age: age || 0,
    hobbies: [...hobbies, '编程'], // 扩展运算符添加默认爱好
    address: { city: '未知', ...address }, // 合并地址信息
    otherInfo: [...otherInfo] // 剩余参数收集其他信息
  };
  
  return userInfo;
}

// 使用示例
const user = processUserData(
  {
    name: '赵六',
    age: 28,
    hobbies: ['阅读', '运动'],
    address: { city: '上海', district: '浦东' }
  },
  '高级会员',
  'VIP用户'
);

console.log(user);


使用建议

  1. 优先使用箭头函数:特别是在需要保持this指向的场景,如事件处理、定时器回调等。

  2. 合理使用参数默认值:给可选参数设置合理的默认值,减少外部判断。

  3. 用剩余参数替代arguments:剩余参数是真正的数组,使用更方便。

  4. 善用扩展运算符:在数组合并、复制、传参时使用,代码更简洁。

  5. 参数解构提高可读性:当参数较多或结构复杂时,使用解构让代码更清晰。

这些ES6函数特性现在已经成为了现代JavaScript开发的标准写法。掌握它们不仅能提高编码效率,还能让代码更加清晰易懂。在实际项目中灵活运用这些特性,你会发现JavaScript函数编写变得轻松很多。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/article/detial/13194

es6 箭头函数的使用总结,带你深入理解js中的箭头函数

箭头函数是ES6中非常重要的性特性。它最显著的作用就是:更简短的函数,并且不绑定this,arguments等属性,它的this永远指向其上下文的 this。它最适合用于非方法函数,并且它们不能用作构造函数。

详解JavaScript模块化开发require.js

js模块化的开发并不是随心所欲的,为了便于他人的使用和交流,需要遵循一定的规范。目前,通行的js模块规范主要有两种:CommonJS和AMD

js解构赋值,关于es6中的解构赋值的用途总结

ES6中添加了一个新属性解构,允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量。用途:交换变量的值、从函数返回多个值、函数参数的定义、提取JSON数据、函数参数的默认值...

ES6中let变量的特点,使用let声明总汇

ES6中let变量的特点:1.let声明变量存在块级作用域,2.let不能先使用再声明3.暂时性死区,在代码块内使用let命令声明变量之前,该变量都是不可用的,4.不允许重复声明

ES6的7个实用技巧

ES6的7个实用技巧包括:1交换元素,2 调试,3 单条语句,4 数组拼接,5 制作副本,6 命名参数,7 Async/Await结合数组解构

ES6 Decorator_js中的装饰器函数

ES6装饰器(Decorator)是一个函数,用来修改类的行为 在设计阶段可以对类和属性进行注释和修改。从本质上上讲,装饰器的最大作用是修改预定义好的逻辑,或者给各种结构添加一些元数据。

基于ES6的tinyJquery

Query作为曾经Web前端的必备利器,随着MVVM框架的兴起,如今已稍显没落。用ES6写了一个基于class简化版的jQuery,包含基础DOM操作,支持链式操作...

ES6 中的一些技巧,使你的代码更清晰,更简短,更易读!

ES6 中的一些技巧:模版字符串、块级作用域、Let、Const、块级作用域函数问题、扩展运算符、函数默认参数、解构、对象字面量和简明参数、动态属性名称、箭头函数、for … of 循环、数字字面量。

Rest/Spread 属性_探索 ES2018 和 ES2019

Rest/Spread 属性:rest操作符在对象解构中的使用。目前,该操作符仅适用于数组解构和参数定义。spread操作符在对象字面量中的使用。目前,这个操作符只能在数组字面量和函数以及方法调用中使用。

使用ES6让你的React代码提升到一个新档次

ES6使您的代码更具表现力和可读性。而且它与React完美配合!现在您已了解更多基础知识:现在是时候将你的ES6技能提升到一个新的水平!嵌套props解构、 传下所有props、props解构、作为参数的函数、列表解构

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!