基础题
1.什么是闭包?
闭包是指函数能够访问并操作其外部函数作用域中的变量。它通过将内部函数返回或传递给其他函数来实现。
例:function outer() {
var x = 10;
function inner() { console.log(x); }
return inner;
}
var closure = outer();
closure(); // 输出 10
2.JavaScript有哪些基本数据类型?
3.如何判断一个变量的数据类型?
-
instanceof:可以用来检查一个对象是否属于某个特定类或其子类。它是通过检查对象的原型链来确定的,如果对象的原型链中存在指定类或其子类,则返回true,否则返回false。它可以判断引用类型的具体类型,但不能判断基本类型。
-
Object.prototype.toString.call():可以用来获取一个对象的内部属性[[Class]],从而判断其类型。这种方法可以判断基本类型和引用类型,返回的结果是一个字符串,格式为"[object 类型]",其中类型表示对象的具体类型。可以判断基本类型和引用类型的具体类型,但需要通过调用方法来获取类型信息。
-
typeof():主要用于判断基本类型,如字符串、数字、布尔值等。对于引用类型,除了函数以外,typeof()只能返回"object",无法具体判断其类型。
4.什么是事件冒泡和事件捕获?它们有什么区别?
事件冒泡是指事件从最具体的元素开始触发,然后逐级向上传播到较为不具体的元素。事件捕获则相反,它从最不具体的元素开始触发,然后逐级向下传播到较为具体的元素。区别在于触发顺序的不同。
5.如何阻止事件冒泡或默认行为?
可以使用event.stopPropagation()
方法来阻止事件冒泡,使用event.preventDefault()
方法来阻止默认行为。
6.什么是原型链?如何利用原型链实现继承?
原型链是JavaScript中对象之间的一种关系,每个对象都有一个指向其原型的链接。当访问一个对象的属性时,如果该对象本身没有该属性,JavaScript会沿着原型链向上查找。通过将一个对象的原型设置为另一个对象,可以实现继承。
7.如何遍历一个对象的属性?
-
for…in循环:使用for…in循环可以遍历对象的所有可枚举属性,并访问每个属性。
-
Object.getOwnPropertyNames():使用Object.getOwnPropertyNames()方法可以获取对象的所有属性名,并返回一个包含属性名的数组。通过遍历这个数组,可以访问对象的属性。
-
Reflect.ownKeys():使用Reflect.ownKeys()方法可以获取对象的所有属性名(包括Symbol类型的属性),并返回一个包含属性名的数组。通过遍历这个数组,可以访问对象的属性。
8.如何判断一个变量是否为数组?
-
使用Array.isArray()方法:是数组则返回true,否则false。
-
使用instanceof操作: 可以使用instanceof操作符来一个变量是否为数组。
3.使用Array.prototype.isPrototypeOf()方法: 可以使用Array.prototype.isPrototypeOf()方法来判断一个变量是否为数组。
4.使用Object.prototype.toString()方法: 该方法会返回一个表示变量类型的字符串,对于数组来说,返回的字符串是"[object Array]"。