¿Conoces JavaScript? ¡Ven y prueba estas 12 preguntas de la entrevista!

¡Trabajar juntos para crear y crecer juntos! Este es el día 21 de mi participación en el "Nuggets Daily New Plan·August Update Challenge", haz clic para ver los detalles del evento

JavaScript es una tecnología básica que todo desarrollador front-end debe dominar, pero en muchos casos, es posible que no comprenda completamente JavaScript.
Hay dos formas muy sencillas de probar el nivel de habilidad de una persona, mirar el código que escribió o dejar que mire el código escrito por otros.
He reunido algunas preguntas de código para evaluar su comprensión de JavaScript, puede probarlas y ver si puede responderlas correctamente. Si aciertas todas las respuestas, sabes algo de JavaScript.

primera pregunta

Trate de especular su salida:

const person = { name: '代码与野兽' }
Object.defineProperty(person, 'age', { value: 18 })

console.log(person.age)
console.log(Object.keys(person))
复制代码

producción:

18
['name']
复制代码

Análisis:
Mucha gente es propensa a confundir la segunda salida, porque las propiedades definidas con defineProperty no son enumerables por defecto.

Pregunta 2

Trate de especular su salida:

const name = '代码与野兽'
age = 18

console.log(delete name)
console.log(delete age)
console.log(typeof age)
复制代码

producción:

false
true
"undefined"
复制代码

Análisis:
el primer falso se debe a que la eliminación solo puede eliminar atributos en el objeto, el nombre no es un atributo, por lo que la eliminación falla.
El segundo verdadero es porque no usamos ninguna declaración para crear una variable, se considerará como una variable global y se montará en el objeto de la ventana, lo que equivale a eliminar window.age, por lo que la eliminación es exitosa.
El tercero indefinido se debe a que se eliminó la edad.

Pregunta 3

Trate de especular su salida:

let person = { name: '代码与野兽' }
const members = [person]
person = null
console.log(members)
复制代码

producción:

[{
  name: "代码与野兽"
}]
复制代码

Análisis:
Mucha gente piensa que el resultado debería ser [ nulo ], pero simplemente establecemos una nueva referencia a la variable persona, y la referencia anterior todavía está en los miembros.
En resumen, { nombre: 'Code and Beast' } Este objeto existe en algún espacio de memoria, digamos que su dirección es X201. Su lógica es más o menos la siguiente:

let person = X201
const members = [X201]
persion = null
复制代码

Pregunta 4

Trate de especular su salida:

function SuperHero() {
  this.make = '代码与野兽'
  return { make: '野兽与代码'}
}

const mySuperhero = new SuperHero()
console.log(mySuperhero)
复制代码

producción:

{
  make: "野兽与代码"
}
复制代码

Resolución:
si el constructor finalmente devuelve un objeto, las propiedades establecidas anteriormente no serán válidas.

Pregunta 5

Trate de especular su salida:

const name = '代码与野兽'
console.log(name.padStart(14))
console.log(name.padStart(2))
复制代码

producción:

"         代码与野兽"
"代码与野兽"
复制代码

Análisis:
el método padStart puede rellenar espacios al principio de la cadena.
El parámetro es la longitud total de la nueva cadena, si esta longitud es más corta que la longitud de la cadena original, no se realizará ningún relleno.

Pregunta 6

Trate de especular su salida:

console.log(parseInt("7"))
console.log(parseInt("7*6"))
console.log(parseInt("7Din"))
复制代码

producción:

7
7
7
复制代码

Análisis:
si el argumento de parseInt es una combinación de una cadena y un número, comprueba desde el principio hasta que llega a la posición del tipo de datos incorrecto, y si es un número válido antes de la posición del tipo de datos incorrecto, devuelve el número .

Pregunta 7

Trate de especular su salida:

[1, 2, 3, 4].reduce((x, y) => console.log(x, y))
复制代码

producción:

1
2
undefined
3
undefined
4
复制代码

Explicación:
Si no pasamos un valor inicial para reducir, entonces x será el primer valor de la matriz y y será el segundo valor de la matriz.

Pregunta 8

Trate de especular su salida:

function getUserInfo(one, two, three) {
  console.log(one)
  console.log(two)
  console.log(three)
}

const superHero = '代码与野兽'
const age = 1000

getUserInfo`${superHero}${age} 岁`
getUserInfo`hello`
复制代码

producción:

["", " 是 ", " 岁"]
"代码与野兽"
1000
["hello"]
undefined
undefined
复制代码

Análisis:
cuando usamos la sintaxis de cadena de plantilla para llamar a una función, el primer parámetro siempre es una matriz de cadena dividida. Los argumentos restantes son los valores de la expresión de la plantilla.

Pregunta 9

Trate de especular su salida:

(() => {
  let x, y;
  try {
    throw new Error()
  } catch (x) {
    (x = 1), (y = 2);
    console.log(x)
  }
  console.log(x)
  console.log(y)
})()
复制代码

producción:

1
undefined
2
复制代码

Análisis:
Acceso x en la captura, el acceso es el parámetro, no la variable x fuera.

Pregunta 10

Trate de especular su salida:

class Clazz {}

console.log(typeof Clazz)
复制代码

producción:

"function"
复制代码

Análisis:
En JavaScript, Class también es una función.

Pregunta 11

Trate de especular su salida:

const arr = [7, 1, 4, 3, 2];
for (const elem of arr) {
  setTimeout(() => console.log(elem), elem);
}
复制代码

producción:

1
2
3
4
7
复制代码

Análisis:
nada que explicar...

Pregunta 12

Trate de especular su salida:

const foo = { bar: 1 };
with(foo) {
  var bar = 2
};
console.log(foo.bar);
复制代码

producción:

2
复制代码

Análisis:
El objeto de with se utilizará como objeto global. Usar var in with es equivalente a window.[xxx]. Y luego foo es la ventana.

Supongo que te gusta

Origin juejin.im/post/7133397098719870990
Recomendado
Clasificación