这是我参与更文挑战的第13天,活动详情查看:更文挑战
146. 输出是什么?
function getFruit(fruits) { console.log(fruits?.[1]?.[1]) } getFruit([['????', '????'], ['????']]) getFruit() getFruit([['????'], ['????', '????']])
答:D,本题主要考察的是可选链操作符,只要不存在返回的是undefined,所以选D。
147. 输出什么?
class Calc { constructor() { this.count = 0 } increase() { this.count ++ } } const calc = new Calc() new Calc().increase() console.log(calc.count)
答:A,本题调用increase的对象和calc不是同一个对象,所以答案还是0.
148. 输出什么?
const user = { email: "e@mail.com", password: "12345" } const updateUser = ({ email, password }) => { if (email) { Object.assign(user, { email }) } if (password) { user.password = password } return user } const updatedUser = updateUser({ email: "new@email.com" }) console.log(updatedUser === user)
答:B,本题中并未对user这个对象的地址进行修改,只是对内部进行了修改,所以updatedUser和user地址相同。
149. 输出什么?
const fruit = ['????', '????', '????'] fruit.slice(0, 1) fruit.splice(0, 1) fruit.unshift('????') console.log(fruit)
答:C,本题就是考查我们对常用API的熟系程度,splice会对原数组产生副作用,unshift则是在数组最前面添加元素,所以答案是C。
150. 输出什么?
const animals = {}; let dog = { emoji: '????' } let cat = { emoji: '????' } animals[dog] = { ...dog, name: "Mara" } animals[cat] = { ...cat, name: "Sara" } console.log(animals[dog])
答:B,用一个对象作为键,底层存储的是"object Object",所以这样看来,dog和cat在animals的键是相同的,所以cat对应的值能够覆盖dog,所以选B。
151. 输出什么?
const user = { email: "my@email.com", updateEmail: email => { this.email = email } } user.updateEmail("new@email.com") console.log(user.email)
答:D,本题考查的是箭头函数this指向的问题,此时this指向的是全局对象,由于全局没有email这个属性,所以会报错:
152. 输出什么?
const promise1 = Promise.resolve('First') const promise2 = Promise.resolve('Second') const promise3 = Promise.reject('Third') const promise4 = Promise.resolve('Fourth') const runPromises = async () => { const res1 = await Promise.all([promise1, promise2]) const res2 = await Promise.all([promise3, promise4]) return [res1, res2] } runPromises() .then(res => console.log(res)) .catch(err => console.log(err)) 复制代码
答:D,本题主要考察我们对Promise.all的了解,只要接收到了一个reject,直接将异步结果返回给捕捉错误的回调函数,所以直接打印Third.
153. 哪个作为method的值可以打印{ name: "Lydia", age: 22 }?
const keys = ["name", "age"] const values = ["Lydia", 22] const method = /* ?? */ Object[method](keys.map((_, i) => { return [keys[i], values[i]] })) // { name: "Lydia", age: 22 } 复制代码
答:C,本题主要是考查我们是否知道如何将二维数组转换为对象,可以通过C这个API,
154. 输出什么?
const createMember = ({ email, address = {}}) => { const validEmail = /.+\@.+\..+/.test(email) if (!validEmail) throw new Error("Valid email pls") return { email, address: address ? address : null } } const member = createMember({ email: "my@email.com" }) console.log(member)
答:C,本题需要知道一点,那就是空对象属于真值,所以在返回对象的时候,address并不是返回null,而是返回的{}.
155. 输出什么?
let randomValue = { name: "Lydia" } randomValue = 23 if (!typeof randomValue === "string") { console.log("It's not a string!") } else { console.log("Yay it's a string!") }
答:B,首先我们要知道本题的运算优先级,首先会计算typeof randomValue,这回返回一个"number",这是一个字符串,对字符串取反,返回false,false并不等于"string",所以最后输出的是else对应的语句,"Yay it's a string!"。