2018-12-11
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。
flex-direction flex-wrap flex-flow justify-content align-items align-content
order flex-grow flex-shrink flex-basis flex align-items
模板字符串
str.includes() 判断字符串是否含有某值 str.repeat(2) 字符串重复两次
arr.includes() 判断数组是否含有某值。
浅复制
Object.assign()
let objA = {
name: 'hhee',
getName() {
console.log(this.name)
}
}
let objB = {
age: 19
}
const obj = Object.assign({}, objA, objB);
obj.getName();
Object.keys 返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。
如果要将一个已经声明的变量用于解构赋值,必须非常小心。
// 错误的写法
let x;
{x} = {x: 1};
// SyntaxError: syntax error
上面代码的写法会报错,因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。
// 正确的写法
let x;
({x} = {x: 1});
字符串方法
normalize() 将字符的不同表示方法统一为同样的形式。
includes() startsWith() endsWith() 返回布尔值
第一个参数 传入 字符串 第二个参数传入数值 includes 和startsWith 两个方法中 表示从第二个参数开始查,endsWith表示从第二个参数结束。因为是 结尾嘛!
ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。
如果省略第二个参数,默认使用空格补全长度。
'x'.padStart(4) // ' x'
'x'.padEnd(4) // 'x '
padStart的常见用途是为数值补全指定位数。下面代码生成 10 位的数值字符串。
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"
另一个用途是提示字符串格式。
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"
箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。
箭头函数有几个使用注意点。
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
console.log(Array.from(arrayLike))
[ 'a', 'b', 'c' ]
Symbol 属性访问 Object.getOwnPropertySymbols 成员是当前对象的Symbol值。
Reflect.ownKeys方法可以返回所有类型的键名,包括常规键名和 Symbol 键名。
Symbol() 生成独一无二的值 Symbol.for()生成可以重复的值
yield表达式如果用在另一个表达式中,必须放在圆括号里。如果用作函数参数或者放在赋值表达式的右边,介意不加括号。
forEach方法的参数是一个普通函数,不能使用yield表达式
网友 vision57 提出,next()、throw()、return()这三个方法本质上是同一件事,可以放在一起理解。它们的作用都是让 Generator 函数恢复执行,并且使用不同的语句替换yield表达式。
next()是将yield表达式替换成一个值。
const g = function* (x, y) {
let result = yield x + y;
return result;
};
const gen = g(1, 2);
gen.next(); // Object {value: 3, done: false}
gen.next(1); // Object {value: 1, done: true}
// 相当于将 let result = yield x + y
// 替换成 let result = 1;
上面代码中,第二个next(1)方法就相当于将yield表达式替换成一个值1。如果next方法没有参数,就相当于替换成undefined。
throw()是将yield表达式替换成一个throw语句。
gen.throw(new Error('出错了')); // Uncaught Error: 出错了
// 相当于将 let result = yield x + y
// 替换成 let result = throw(new Error('出错了'));
return()是将yield表达式替换成一个return语句。
gen.return(2); // Object {value: 2, done: true}
// 相当于将 let result = yield x + y
// 替换成 let result = return 2;