前端开发那些事儿

JavaScript 小知识

2021-06-07  本文已影响0人  婆娘漂亮生活安逸

undefined 和 null 有什么区别?




解释 JavaScript 中的值和类型?




JavaScript 的 typeof 返回值有哪些?




以下代码输出的结果是什么?


  0.1 + 0.2 === 0.3

这段代码的输出是 false,这是由浮点数内部表示导致的。0.1 + 0.2 并不刚好等于 0.3,实际结果是 0.30000000000000004。解决这个问题的一个办法是在对小数进行算术运算时对结果进行舍入。



为什么在 JS 中比较两个相似的对象时返回 false?


  let a = { a: 1 };
  let b = { a: 1 };
  let c = a;

  console.log(a === b); // false
  console.log(a === c); // true

JS 在比较对象时,是通过比较对象在内存中的存储地址。
因此, a 与 b 是放在不同的引用地址,返回 false;a 与 c 是存放在相同的引用地址,返回 true。



深浅拷贝?


深浅拷贝只是针对引用类型的,因为引用类型是存放在堆内存中,在栈地址有一个或者多个地址来指向堆内存的某一数据



如何在一行中计算多个表达式的值?


可以使用逗号运算符在一行中计算多个表达式。 它从左到右求值,并返回右边最后一个项目或最后一个操作数的值。

  let x = 5;
  x = (x++, x = addFive(x), x *= 2, x -= 5, x += 10);
  function addFive(num) {
    return num + 5;
  }

因此,上述操作最终返回 27。
计算步骤如下:

  x = 5;
  x++:进行了自增,得到 x = 6;
  x = addFive(x):传入参数 6,得到 x = 11;
  x *= 2:进行了乘法操作,得到 x = 22;
  x -= 5:进行减法操作,得到 x = 17;
  x += 10:进行加法操作,得到 x = 27。



JavaScript 中的虚值是什么?如何检查是否为虚值?




如何理解 JS 中的 this 关键字?




事件委托是什么?


对“事件处理程序过多”问题的解决方案就是事件委托。事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。



作用域是什么?


作用域是一套规则,用于确定在何处以及如何查找变量(标识符)。如果查找的目的是为了对变量进行赋值,那么就会使用 LHS 查询。如果目的是为了获取变量的值,就会使用 RHS 查询。



什么是闭包?




原型链




解释一下变量的提升?


引擎会在解释 JavaScript 代码之前首先对其进行编译。编译阶段中的一部分工作就是找到所有的声明,并用合适的作用域将它们关联起来。
这个过程,就像把变量和函数声明从它们在代码中出现的位置被移动到了最上面,这个过程就叫做提升。
函数声明和变量声明都会被提升,优先级是函数会首先被提升,然后才是变量。



如何理解高阶函数?


既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
一个简单的高阶函数定义:

function add(x, y, f) {
    return f(x) + f(y);
}



如何区分声明函数和表达式函数?


区分函数声明和表达式最简单的方法是看function关键字出现在声明中的位置(不仅仅是一行代码,而是整个声明中的位置)。如果function是声明中的第一个词,那么就是一个函数声明,否则就是一个函数表达式。



什么是 IIFE(立即调用函数表达式)?


由于函数被包含在一对()括号内部,因此成为了一个表达式,通过在末尾加上另外一个()可以立即执行这个函数,比如(function foo() { .. })()。第一个()将函数编程表达式,第二个()执行了这个函数。

  (
    function foo() {
      var a = 3
      console.log(a)
    }
  )()
上一篇 下一篇

猜你喜欢

热点阅读