(1)默认参数
function log(x, y = 'World') {
console.log(x, y);
}
(2)length属性
length
属性将失真。(function (a, b, c = 5) {}).length // 2
length
属性。(function(...args) {}).length // 0
(3)rest参数
...变量名
,用于获取函数的多余参数,该变量将多余的参数序列放入数组中。function add(...value){}
(4)箭头函数
this
,也不可以当作构造函数。
(1)扩展运算符
...数组名
,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。console.log(...[1, 2, 3]) // 1 2 3
const a1 = [1, 2];
const a2 = [...a1];
const a1 = ['a', 'b'];
const a2 = ['c'];
[...a1, ...a2 ] //[ 'a', 'b', 'c' ]
(2)Array.from()
Array.from('hello') // ['h', 'e', 'l', 'l', 'o']
map
方法。Array.from([1, 2, 3], (x) => x * x) // [1, 4, 9]
(3)Array.of()
Array.of(3, 11, 8) // [3,11,8]
(4)新增的方法
const arr = [1, 2, NaN]
console.log(arr.indexOf(NaN)) // -1
console.log(arr.includes(NaN)) // true includes能找到NaN
(1)属性和方法的简写。
(2)Object.is()
+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
(3)Object.assign()
source
的所有可枚举属性,复制到目标对象target
上。const target = { a: 1, b: 1 };
const source1 = { b: 2, c: 2 };
Object.assign(target, source1);
(4)Object.keys()
键名
的数组。(5)Object.values()
键值
的数组。
(1)Set
// 数组去重
[...new Set(array)]
(2)Map
var proxy = new Proxy(target, handler);
//target参数表示所要拦截的目标对象
//handler参数也是一个对象,用来定制拦截行为
(1)get(target, propKey, receiver):拦截对象属性的读取操作。
(2)set(target, propKey, value, receiver):拦截对象属性的赋值操作。
(3)deleteProperty(target, propKey):拦截delete操作。
(1)概述
(2)用法
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
resolve
函数的作用是,将Promise
对象的状态从“未完成”变为“成功”,在异步操作成功时调用,并将异步操作的结果,作为参数传递出去。reject
函数的作用是,将Promise
对象的状态从“未完成”变为“失败”。promise.then(function(value) {
// success
}, function(error) {
// failure
});
then
方法分别指定resolved
状态和rejected
状态的回调函数。
(3)Promise.all()
Promise.all()
方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。const p = Promise.all([p1, p2, p3]);
(4)Promise.race()
Promise.race()
方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。const p = Promise.race([p1, p2, p3]);
(1)Iterator概述
Symbol.iterator
属性,就称这种数据结构是“可遍历的”,就可以用for...of
循环遍历它的成员。
(2)for in和for of的区别?
(1)概述
const asyncReadFile = async function () {
const f1 = await readFile('/etc/fstab');
const f2 = await readFile('/etc/shells');
};
asyncReadFile().then();
(2)特点
async
函数自带执行器,不像Generator需要调用next
方法 。await
命令后面,可以是 Promise 对象和原始类型的值。async
函数的返回值是 Promise 对象,用then
方法指定下一步的操作。
(1)回调函数
(2)promise
(3)async和await
标签加载 JavaScript 脚本,打开defer
或async
属性后,脚本就会异步加载。defer
是“渲染完再执行”,async
是“下载完就执行”。defer
脚本,会按照它们在页面出现的顺序加载,而多个async
脚本是不能保证加载顺序的。<script src="path/to/myModule.js" defer></script>
<script src="path/to/myModule.js" async></script>
this
指向当前模块,ES6模块化中this
指向undefined。参考文献:
https://es6.ruanyifeng.com/
https://xieyufei.com/2021/01/08/CommonJS-ES6.html
CommonJS模块和ES6模块的区别 - 凯斯keith - 博客园 (cnblogs.com)