js常见面试题
- 1、es6新增基本数据类型 symbol 特点就是唯一性,
- 2、typeof 是优先级很高的一元运算符 。
- 3、判断对象数据类型 区分数组和对象
- 4、数组的常用方法
- 5、数组实现去重;分为四大类:
- 6、伪数组 arguments 对象 ,dom多元素选择器选择出来的值;
- 7、伪数组转换正常数组 Array.prototype.slice.call(); || [].slice.call();
- 8、常见的string 的常见方法:
- ❄9、js 继承 ❄
- 10、script 标签上的属性
- 11、promise 对象
- 12、es6新增常用的东西
- 13、css 进行数据统计 img 跨域 背景图进行display 改变\
- 14、promise async/await原理手写
1、es6新增基本数据类型 symbol 特点就是唯一性,
没有特别大的意义可以避免属性名的冲突。
let firstSymbol = Symbol(‘firstSymbol’);
let secondSymbol = Symbol(‘firstSymbol’);
console.log(firstSymbol == secondSymbol) // false
2、typeof 是优先级很高的一元运算符 。
3、判断对象数据类型 区分数组和对象
1)通过constructor 对象访问它的构造函数 判断是 Array() 还是 Object()
2)通过 instanceof 根据返回的布尔值判断 数组A instanceof Object ;
3)通过 isArray 判断是否是数组;
4)通过 Object.prototype.toString.call(参数);
4、数组的常用方法
pop() push() shift()
unShift() join() reverse()
sort() splice() forEach()
indexOf() lastIndexOf() slice()
filter() map()
4.1、数组方法对原数组本身有影响
push() pop() shift()
unShift() reverse() sort()
splice()
5、数组实现去重;分为四大类:
1) 创建空数组 循环通过indexOf 判断;
2) 在原数组进行对比 冒泡 splice() ;
3) 通过对象key 唯一的特性进行去重;
4) [... new set(array];通过 set 进行去重;
6、伪数组 arguments 对象 ,dom多元素选择器选择出来的值;
7、伪数组转换正常数组 Array.prototype.slice.call(); || [].slice.call();
8、常见的string 的常见方法:
charAt() indexOf() substring(start, end)
substr(start, length) split()
replace()
8.1、 JS字符串截取函数slice(),substring(),substr()的区别
❄9、js 继承 ❄
继承是一个什么东西 两个不同的类有相同的方法 和不同的方法属性 子级可以直接继承父级的所有方法并且可以衍生自身的方法和属性。
原型链继承、构造函数继承、组合继承、原型式继承
//首先定义一个父类
function Animal (name) {
// 属性
this.name = name || 'Animal';
// 实例方法
this.sleep = function(){
console.log(this.name + '正在睡觉!');
}
}
//父类的原型方法
Animal.prototype.eat = function (food) {
console.log(this.name + '正在吃' + food);
}
1)、原型链继承方式:
核心:将父类的实例当做子类的原型
function Cat (){}
//子级的原型指针指向父级
Cat.prototype = new Animal();
Cat.prototype.name = 'cat';
// Test Code
var cat = new Cat();
console.log(cat.name);// cat
console.log(cat.eat('fish')); //cat正在吃fish
console.log(cat.sleep());//cat正在睡觉
console.log(cat instanceof Animal); //true
console.log(cat instanceof Cat); //true
2)、构造函数继承
核心:使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类(没用到原型)
function Cat (name) {
Animal.call(this,name);
this.name = name || 'Tom'
}
let cat = new Cat();
console.log(cat.name)//Tom
cat.sleep();//Tom正在睡觉
cat.eat();//构造函数继承方式并不能继承父类的原型对象
3)、
10、script 标签上的属性
defer属性 :延迟执行
async属性:异步执行
11、promise 对象
new Promise((resove,rejeact) => {
})
1)多个promise 如何等待 通过all
2)promise then catch
3)
12、es6新增常用的东西
1)import export
2)解构赋值
3)let const
4)class
5)箭头函数 传参可以设置默认值 双冒号使用
6)字符串方法 字符串模板`` ${}
7)数组拓展:[...] 拓展运算符
8)对象拓展:属性表达式
babel 如何转换的