前端面试题
1、js的数据类型有哪些
答: 简单数据类型: number string boolean undefined null
复制数据类型: object function array
2、typeof 返回的数据类型
答: number string boolean undefined object function
特殊情况:
typeof null -->object
typeof array -->object
typeof typeof 任何类型 -->string
3、返回false的情况有哪些
答: 0 "" null false NaN undefined 不成立的表达式
4、typeof 和 instanceof 的区别
1、typeof会返回一个变量的基本类型,instanceof返回的是一个布尔值
2、instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型
3、而typeof 也存在弊端,它虽然可以判断基础数据类型(null 除外),但是引用数据类型中,array也无法判断
5、== 和 === 的区别
答:== 表示是相等,只比较内容
=== 表示是全等,不仅比较内容,也比较类型
6、null 和 undefined 的区别
答:null 表示空值 没有获取到。typeof null 返回"object"
undefined 表示未定义,声明没有值。typeof undefined 返回"undefined"
7、let、const、var的区别
1、var声明变量存在提升(提升当前作用域最顶端),let和const是不存在变量提升的情况
2、var没有块级作用,let和const存在块级作用域
3、var允许重复声明,let和const在同一作用域不允许重复声明
4、var和let声明变量可以修改,const是常量不能改变
###8、什么是作用域链
1、作用域:分全局作用域和局部作用域
2、在访问一个变量时,首先在当前作用域中找,如果找不到再到外层作用域中找,这样一层一层的查找,就形成了作用域链。
###9、for in 和 for of 的区别
1、for…in是遍历数组、对象的key
2、for…of是遍历数组的value
例如:
let arr = ["a","b"];
1)for (let key in arr) {
console.log(key); //0 1
}
2)for (let value of arr) {
console.log(value); //a b
}
10、谈谈你对this的理解
普通函数指向:Window
事件处理函数:事件触发对象
11、数组去重的方式
1、 let arr = [1, 2, 3, 3, 4, 4, 5]
let array = [];
for (let i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i]) === -1) {
array.push(arr[i])
}
}
2、 let arr = [1, 2, 3, 3, 4, 4, 5]
let array = [...new Set(arr)]