Colección de preguntas de la entrevista

  1. Los principales navegadores y sus kernels en el mercado.
    Los navegadores se dividen en shell (estilo shell) y kernel.
    Insertar descripción de la imagen aquí
    Aquí hay una cita de un artículo de un gran tipo: Cinco navegadores principales y cuatro kernels.

  2. En js, cuando se compara la expresión después de la declaración de cambio con la expresión después de la declaración de caso, se usa el operador de igualdad estricta (= = =) en lugar del operador de igualdad (==) , lo que significa que al comparar No se produce ninguna conversión de tipo .

  3. En js, las variables globales creadas usando var (esencialmente propiedades de la ventana) no se pueden eliminar usando eliminar, pero las variables globales creadas sin var (esencialmente propiedades de la ventana) se pueden eliminar usando eliminar. Debido a que el atributo configurable en las propiedades integradas de las variables creadas usando var por defecto es falso, no se pueden eliminar.

  4. En js, los valores booleanos correspondientes a matrices vacías ([]) y objetos vacíos ({}) son verdaderos.

  5. No hay números enteros en la parte inferior del lenguaje JavaScript. Todos los números se almacenan en forma de números de coma flotante de 64 bits, incluso los números enteros.

1 === 1.0 // true
0.1 + 0.2 === 0.3 // false
0.3 / 0.1 // 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1) // false
  1. En js, tenga en cuenta que para el comando var, las variables locales solo se pueden declarar dentro de la función. Si se declaran en otros bloques, todas son variables globales.
  2. En js, la función en sí también es un valor y tiene su propio alcance. Su alcance es el mismo que el de una variable, que es el alcance en el que se declara, independientemente del ámbito en el que se ejecuta.
var a = 1;
var x = function () {
    
    
  console.log(a);
};

function f() {
    
    
  var a = 2;
  x();
}

f() // 1
  1. Cierres Los cierres
    tienen dos usos más importantes: uno es leer las variables dentro de la función externa y el otro es mantener estas variables en la memoria, es decir, el cierre puede hacer que el entorno en el que nació siempre exista.
    Tenga en cuenta ** que cada vez que se ejecuta la función externa, se generará un nuevo cierre y este cierre retendrá las variables internas de la función externa, por lo que el consumo de memoria es muy grande. **Por lo tanto, no se puede abusar de los cierres, de lo contrario causará problemas de rendimiento en la página web.
  2. En js, vale la pena señalar que, dado que una matriz es esencialmente un objeto, puede agregar atributos a la matriz, pero esto no afecta el valor del atributo de longitud.
var a = [];

a['p'] = 'abc';
a.length // 0
a['p'] //abc

a[2.1] = '123';
a.length // 0
a[2.1] // 123
  1. Existe una aplicación especial de "operación OR exclusiva": realice tres operaciones OR exclusivas consecutivas en dos números a y b, a^=b; b^=a; a^=b;, y sus valores se pueden intercambiar . Esto significa que utilizando la "operación XOR" se pueden intercambiar los valores de dos variables sin introducir variables temporales.
var a = 10;
var b = 99;

a ^= b, b ^= a, a ^= b;

a // 99
b // 10
  1. En js, tenga en cuenta que una vez definida la función de valor obtener (o conjunto de funciones de valor), el atributo de escritura no se puede establecer en verdadero, o el atributo de valor se puede definir al mismo tiempo; de lo contrario, se informará un error.
var obj = {
    
    };

Object.defineProperty(obj, 'p', {
    
    
  value: 123,
  get: function() {
    
     return 456; }
});
// TypeError: Invalid property.
// A property cannot both have accessors and be writable or have a value

Object.defineProperty(obj, 'p', {
    
    
  writable: true,
  get: function() {
    
     return 456; }
});
// TypeError: Invalid property descriptor.
// Cannot both specify accessors and a value or writable attribute

En el código anterior, si el atributo de obtención y el atributo de valor se definen al mismo tiempo y el atributo de escritura se establece en verdadero, se informará un error.

  1. Número() 、 Cadena() 、 Booleano()
var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);

typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"

v1 === 123 // false
v2 === 'abc' // false
v3 === true // false
// 字符串转为数值
Number('123') // 123

// 数值转为字符串
String(123) // "123"

// 数值转为布尔值
Boolean(123) // true

En resumen, cuando estos tres objetos se usan como constructores (con nuevos), los valores de tipo primitivo se pueden convertir en objetos; cuando se usan como funciones ordinarias (sin nuevos), cualquier tipo de valor se puede convertir en un tipo de valor primitivo.

  1. El método hasOwnProperty de una instancia de objeto devuelve un valor booleano, que se utiliza para determinar si una propiedad está definida en el objeto mismo o en la cadena del prototipo.
Date.hasOwnProperty('length') // true
Date.hasOwnProperty('toString') // false

El código anterior muestra que Date.length (cuántos parámetros puede aceptar el constructor Date) es una propiedad de Date y Date.toString es una propiedad heredada.

Además, el método hasOwnProperty es el único método en JavaScript que no atraviesa la cadena del prototipo al procesar las propiedades del objeto.

  1. La función de devolución de llamada de Promise no es una tarea asincrónica normal, sino una microtarea. La diferencia entre ellas es que las tareas normales se agregan a la siguiente ronda del bucle de eventos** y las microtareas se agregan a esta ronda del bucle de eventos. Esto significa que las microtareas deben ejecutarse antes que las tareas asincrónicas normales. **
setTimeout(function() {
    
    
  console.log(1);
}, 0);

new Promise(function (resolve, reject) {
    
    
  resolve(2);
}).then(console.log);

console.log(3);
// 3
// 2
// 1

El resultado del código anterior es 321. Esto muestra que el tiempo de ejecución de la función de devolución de llamada es anterior a setTimeout(fn, 0). Debido a que then se ejecuta en esta ronda del bucle de eventos, setTimeout(fn, 0) se ejecuta al comienzo de la siguiente ronda del bucle de eventos.

Supongo que te gusta

Origin blog.csdn.net/weixin_46683645/article/details/121517100
Recomendado
Clasificación