1、输出结果
[...'abcd']
答案:[“a”, “b”, “c”, “d”]
解析:string 类型是可迭代的。扩展运算符将迭代的每个字符映射成一个元素。
2、setInterval 方法的返回值是什么?
setInterval(() => console.log('Hi'), 1000)
答案:一个唯一的id
解析:会返回一个ID,用于clearInter清除定时器
3、输出结果
function* generator(i) {
yield i;
yield i * 2;
}
const gen = generator(10);
console.log(gen.next().value);
console.log(gen.next().value);
答案:10,20
解析:
第一个next()执行到第一个yield, 第二个执行到第二个yield, 可以理解为推一步走一步,不推不走
4、输出结果
!!null
!!''
!!1
答案: false false true
解析:
null 是 false。!null 的值是 true。!true 的值是 false。
““是 false。!”” 的值是 true。
!true 的值是 false。 1 是 true。!1 的值是 false。!false 的值是 true。
5、返回值
const firstPromise = new Promise((res, rej) => {
setTimeout(res, 500, "one");
});
const secondPromise = new Promise((res, rej) => {
setTimeout(res, 100, "two");
});
Promise.race([firstPromise, secondPromise]).then(res => console.log(res));
答案:two
解析:
race就是赛跑的意思,谁先返回结果就是最后结果,不管成功还是失败,两个定时器第二个时间短所以先返回
settimeout(callback,time,…params),从第三个参数开始,后面的参数都会传递给callback
6、返回值
let person = { name: "Lydia" };
const members = [person];
person = null;
console.log(members);
答案:[{ name: “Lydia” }]
解析:
当你将引用从一个变量分配至另一个变量时,其实只是执行了一个 复制 操作。
没有修改数组第一个元素的值,而只是修改了变量person的值,因为元素(复制而来)的引用与person不同。members的第一个元素仍然保持着对原始对象的引用。