你应该知道的 10 个 JavaScript 基本面试问题
4 是误解。正确答案是:==
强制类型转换后检查值,===
非强制类型转换后检查值(严格相等)。
本文特别适合那些正在寻找 JavaScript 开发职位的初学者。我搜索过很多 JavaScript 面试题,其中这 10 道对我来说最为重要。让我们深入探讨一下。
1.什么是Javascript?
Javascript 是一种用于 Web 开发的编程语言。JavaScript 在 Web 的客户端运行。
根据 MDN 的说法,JavaScript(通常缩写为 JS)是一种轻量级、解释型、面向对象、函数式编程语言,它最广为人知的是其网页脚本语言,但也在许多非浏览器环境中使用。它是一种基于原型、多范式的动态脚本语言,支持面向对象、命令式和函数式编程风格。
2.什么是DOM
DOM 代表文档对象模型 (DOM)。当网页加载时,浏览器会使用 HTML 和 CSS 文件创建 DOM。DOM 由节点和元素表示。您可以使用 JavaScript 操作 DOM。它是一种树状结构。
3. JS代码如何执行
这个问题在面试中回答起来有点大。不过我们可以简单说一下。JavaScript 在浏览器上运行。几乎每个浏览器都有一个 JavaScript 引擎。V8 是其中最受欢迎的。Chrome 使用的是 V8 引擎。而 Firefox 使用的是 Spider-Monkey 引擎。
4. == 和 === 的区别
简而言之,== 仅检查两个值是否相同。它不会检查这些值的类型。查看下面的代码:
if(2=="2"){
console.log("true")
} else {
console.log("false")
}
上述代码将输出 true。因为它将 2 和 "2" 视为相等,因为它没有检查类型。
相反,=== 会同时检查类型和质量。例如:
if(2==="2"){
console.log("true")
} else {
console.log("false")
}
这将输出 false。因为 2 和 "2" 的值相等,但它们的类型不同。
5. Null 与 Undefined
通常,null 表示空值,不存在,而 undefined 表示已声明但尚未定义。不过,你也可以显式地将 undefined 赋给变量。
var n;
console.log(typeof(n)); // undefined
var n = null;
console.log(typeof(n)); // object
有趣的是,null 是 JS 中的对象类型。
6. Var、Let 和 Const
在 ES6 之前,var 是声明变量的唯一方法。但现在我们有了更多选择。
有一个术语叫作用域。作用域是指这些变量可以在什么地方使用。var 声明是全局作用域,或者函数/局部作用域。
Var 可以被提升,我们稍后会讨论。但现在 let 更适合用于变量声明。如果代码中不需要更改变量,可以使用 const。要了解两者的区别,您可以阅读以下文章,我发现它非常有用。
7. 提升
在 JavaScript 中,变量可以在声明之前使用。将变量和函数声明物理移动到代码顶部的概念称为提升。
console.log(num); // Returns undefined, as only declaration was hoisted, no initialization has happened at this stage
var num; // Declaration
num = 6;
那么 let 和 const 变量不会被提升吗?答案比这更复杂一些。在 JavaScript 中,所有声明(函数、var、let、const 和 class)都会被提升,而 var 声明会使用 undefined 进行初始化,而 let 和 const 声明则保持未初始化状态。
8. 全局与局部作用域
在 JavaScript 中,作用域分为两种:局部作用域和全局作用域。
在函数内声明的变量称为局部作用域,该变量无法在函数外访问。相反,在函数外声明的变量称为全局作用域,可以在函数内访问。
var genre= "superhero" //global scope
// code here can't use superhero but genre
function myFunction() {
var superhero = "Batman"; // local scope
// code here CAN use superhero and genre
}
9. 结束
闭包使我们能够从内部函数访问外部函数的作用域。它可以通过在函数中返回另一个函数来创建。它为每个实例创建一个封闭的环境。例如:
function sum(x) {
return function(y) {
return x + y;
};
}
var add5 = sum(5);
var add10 = sum(10);
console.log(add5(6)); // 11
console.log(add10(6)); // 16
这里 add5 和 add10 都是闭包。它们共享相同的定义,但存储不同的环境。想要了解更多关于闭包的信息,可以点击以下链接:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
10.回调函数
根据 MDN 的定义,回调函数是一个作为参数传递给另一个函数的函数,然后在外部函数内部调用该函数来完成某种例程或操作。例如
function greeting(name) {
console.log('Hello ' + name);
}
function greetEmployee(name,callback) {
callback(name);
}
greetEmployee("Dwight",greeting);
这里,greeting 函数在 greetEmployee 函数内部被使用。这就是我们所说的回调函数。继续阅读,了解更多关于 JS 回调的知识。
感谢阅读本文。希望对您有所帮助。
保持联系
快乐编码