当前位置:嗨网首页>书籍在线阅读

06-解构参数

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.3.2 解构参数

就像解构赋值(详情见第5章)一样,JavaScript中也有解构参数(毕竟参数跟定义变量很类似)。考虑把一个对象解构到不同的变量中:

function getSentence({ subject, verb, object }) {
    return '${subject} ${verb} ${object}';
} 
const o = {
   subject: "I",
   verb: "love",
   object: "JavaScript",
};
getSentence(o);        // "I love JavaScript"

在解构赋值中,参数属性名必须是字符串标识符,而且如果传入的对象不存在与参数属性名匹配的属性,该属性将会接受一个 undefined 值。

甚至可以解构一个数组:

function getSentence([ subject, verb, object ]) {
   return '${subject} ${verb} ${object}';
} 
const arr = [ "I", "love", "JavaScript" ];
getSentence(arr);          // "I love JavaScript"

最后,可以使用展开操作符(...)来收集任何多出来的参数:

function addPrefix(prefix, ...words) {
    // 稍后会用一种更好的方法来实现!
    const prefixedWords = [];
    for(let i=0; i<words.length; i++) {
        prefixedWords[i] = prefix + words[i];
    }
    return prefixedWords;
}
addPrefix("con", "verse", "vex");   // ["converse", "convex"]

注意,如果在函数定义中使用展开操作符,它必须是最后一个参数。如果在它之后还有参数,JavaScript就无法分辨出哪些参数使用展开参数,哪些使用它之后的参数。

在ES5中,类似的功能可以被只存在函数体中的特殊变量所实现:参数。这个变量并不是严格意义上的数组,它是一个“类数组”的对象,经常需要特殊处理,或者转化成合理的数组。ES6中的展开数组解决了这个问题,所以相比参数变量(现在依然存在),更应该使用展开参数。