const p1 = {
name:'lily',
age:1,
city:'北京'
}
function changeName(p){
return{...p,name:'ford'}
}
想必题主不清楚三个点(...)代表着什么,在这里先介绍下:
介绍:展开语法(叫做 扩展运算符),可以在函数调用/数组构造时,将数组表达式或者 string 在语法层面展开,还可以在构造字面量(字面量一般指 [1, 2, 3]或者 { name: 'rendong' } 这种简洁的构造方式)对象时,将对象表达式按 key-value 的方式展开(简洁些说,可用于将集合和数组中的元素扩展为单个单独的元素)。由三个点(...)表示,在ES6中引入,在 chrome 46 版本中开始支持
作用:扩展运算符可用于创建和克隆数组和对象、将数组作为函数参数传递、从数组中删除重复项等等
语法:扩展运算符只能用于可迭代对象,他必须在可第二代对象之前使用,没有任何分隔,例如:console.log(...arr)
使用场景
let arr = [10, 4, 6];
Math.min(...arr); // 4
let arr = [1,2,3,4]
let arr2 = [...arr]
arr2.push(5);
console.log(arr) // [1, 2, 3, 4]
console.log(arr2) // [1, 2, 3, 4, 5]
let arr = [4, 5, 6]
let arr2 = [1, 2, 3]
let arr3 = [...arr, ...arr2] // [4, 5, 6, 1, 2, 3]
let str = 'rendong'
let arr = [...str]; // ['r', 'e', 'n', 'd', 'o', 'n', 'g']
let person = {
name: '忍冬',
age: 18
}
let obj = { ...person }; // {name: '忍冬', age: 18}
let person = {
name: '忍冬',
age: 18
}
let person2 = {
name: '连翘',
site: 'beijing'
}
let person3 = { ...person, ...person2}; // {name: '连翘', age: 18, site: 'beijing'}
let arr = ['忍', '冬']
let obj = { ...arr }; // {0: '忍', 1: '冬'}
let str = '忍冬'
let obj = {0: '忍', 1: '冬'}
let nodeList = document.querySelectorAll('div'); // NodeList [div, div]
let arr = [ ...nodeList ]; // Array [div, div]
let arr = [ 10, 10, 12, 2 ];
let arr2 = [...net Set(arr)]; // [10, 12, 2]
let arr = [2,3,1,2]
function fnSum(...aParam) {
let sum = 0;
aParam.forEach(v=> sum+=v);
return sum;
}
fnSum(...arr); // 8
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax
这个很正常啊,任何东西都可以返回,这个是一个匿名字典或者说一个对象。
简单点说 就是一个结果 在方法里 你可以return出一个结果 这个结果可以是任何东西 比如你return一个对象
调用该方法 最后就会得到return的值
js是弱类型的编程语言
既然一个变量里可以保存任何类型,包括对象
那么一个函数的返回值当然也可以是任何类型,包括对象
这跟先把一个对象赋值给一个变量,然后返回这个变量,不是一回事吗
changeName方法返回一个对象字面量:
function changeName(name) {
return {
firstName: name.split(' ')[0],
lastName: name.split(' ')[1]
};
}
const person = changeName('John Doe');
console.log(person.firstName); // 输出:John
console.log(person.lastName); // 输出:Doe
在这个例子中,changeName方法接收一个名字字符串,然后将其拆分成姓和名,并返回一个包含firstName和lastName属性的对象字面量。
另外,如果你使用ES6的类来创建对象,可以在return语句中实例化一个类,例如:
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
function changeName(name) {
return new Person(name.split(' ')[0], name.split(' ')[1]);
}
const person = changeName('John Doe');
console.log(person.firstName); // 输出:John
console.log(person.lastName); // 输出:Doe
在这个例子中,changeName方法返回一个Person类的实例,该实例的firstName和lastName属性根据传入的名字字符串进行初始化。