concat()
concat() 方法用于连接两个或多个数组。
该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
这方法对于在React中很有用,可以在不直接改变传入到子组件的属性值的情况下,间接对属性值改变
let newCount = props.count.concat();
newCount.splice(0, 1)
Object.assign() 方法
该方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(source);
//expected output: Object { b: 4, c: 5 }
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }
map()方法
map()会处理原数组的每个元素,然后返回一个经过函数处理的新数组。
正则表达式之lastIndex
我们看上述图片,设置一个正则表达式reg,让它去匹配字符串ab,匹配成功true,并且lastIndex为1。
那么下次正则再匹配字符串是以索引为1的序列开始匹配,所有下次test(‘ab’)就为false了,匹配不到a,因为从b开始匹配。
哪怕你更换了字符串也一样
除非重新把lastIndex置为0
因此,如果正则是全局模式,可能需要每次匹配字符串后,需要把lastIndex置为0.
concat()函数
该方法用户把一个数组连接其他对象,返回一个新的数组,新数组是原数组的一个副本,不会改变原数组。
let arr1 = [1];
let obj2 = {b: 2};
let newArr = arr1.concat(obj2);
console.log(newArr);//[ 1, { b: 2 } ]
console.log(arr1);//[ 1 ]
Object.create()
来看一个例子:
const person = {
isHuman: false,
printIntroduction: function() {
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
}
};
这是一个对象,里面有属性和方法;
const me = Object.create(person);
我们使用Object.create会创建一个新对象,把这个新对象赋值给me(注意:这个新对象是个空对象,不能直接把Object.create的值赋给一个有值的对象,这样会把这个对象变成空对象,假如有个对象为obj = {a: 1},如果obj = Object.create(person),那么obj就变成了{}),
那么me这个新对象会有一个属性__proto__,它指向person,也就是说
proto = person;
proto 里的属性,是被代理过的,也就是me对象能够me.__proto__的属性,相当于me.proto.属性 取值。
所以:
me.name = 'Matthew'; // "name" is a property set on "me", but not on "person"
me.isHuman = true; // inherited properties can be overwritten
me.printIntroduction();
// expected output: "My name is Matthew. Am I human? true"