155个JavaScript基础问题(146-155)

这是我参与更文挑战的第13天,活动详情查看:更文挑战

146. 输出是什么?

function getFruit(fruits) {
    console.log(fruits?.[1]?.[1])
}
getFruit([['????', '????'], ['????']])
getFruit()
getFruit([['????'], ['????', '????']])

155个JavaScript基础问题(146-155)

答:D,本题主要考察的是可选链操作符,只要不存在返回的是undefined,所以选D。

147. 输出什么?

class Calc {
    constructor() {
        this.count = 0 
    }
    increase() {
        this.count ++
    }
}
const calc = new Calc()
new Calc().increase()
console.log(calc.count)


155个JavaScript基础问题(146-155)

答: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)


155个JavaScript基础问题(146-155)

答:B,本题中并未对user这个对象的地址进行修改,只是对内部进行了修改,所以updatedUser和user地址相同。

149. 输出什么?

const fruit = ['????', '????', '????']
fruit.slice(0, 1)
fruit.splice(0, 1)
fruit.unshift('????')
console.log(fruit)

155个JavaScript基础问题(146-155)

答: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])


155个JavaScript基础问题(146-155)


答: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)

155个JavaScript基础问题(146-155)

答: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!")
}

155个JavaScript基础问题(146-155)

答:B,首先我们要知道本题的运算优先级,首先会计算typeof randomValue,这回返回一个"number",这是一个字符串,对字符串取反,返回false,false并不等于"string",所以最后输出的是else对应的语句,"Yay it's a string!"。

上一篇:第六章:按钮点击(5)


下一篇:PNA外网访问证书吊销列表问题