- 基本数据类型(五种)与复杂数据类型(对象)
-
typeof
判断数据类型(数字、字符串、布尔、undefined、函数) -
Object.prototype.toString.call()
==> 如:'[object number]' Array.isArray()
isNaN
-
- undefined数据的出现原因
- 变量声明未赋值
- 变量声明赋值
undefined
- 对象属性不存在
- 对象的调用方式(两种)与区别,删除对象属性
- 构造函数,
instanceof
判断是否为构造函数的实例- 不返回,返回基本数据类型、返回对象 == > 创建的对象还是构造函数的实例吗?
- 内置构造函数
- 构造函数的父对象,实例的原型对象就是构造函数.prototype
p1.__proto__ === Person.prototype
-
==
与===
区别 - 继承的几种方式
- 原型链继承
function Person(data1,data2){ this.data1 = data1; this.data2 = data2; } //Person.prototype.say=function(){} Person.prototype={ constructor:Person //不破坏原有原型对象 say:function(){} } var p1=new Person(1,2);
- 拷贝继承
-- for in与for of区别- ES6的对象扩展运算符(...args)
- ES5的Object.assign()
var a={name:1,age:2}; var b={}; for(var key in a){ b[key] = a[key]; } b.sex = "男";
- 原型式继承
- 场景
- 创建一个纯洁的对象,对象什么属性都没有
- 创建一个继承自某个父对象的子对象
Object.create(null)
- 借用构造函数实现继承
- 原理:函数的
call
、apply
调用方式 - 场景:适用于两种构造函数之间逻辑相似的情况
- 原理:函数的
function Animal(name,age){ this.name = name; this.age = age; } function Person(name,age,say){ //Animal.call(this,name,age); Animal.apply(this,[name,age]); this.say = say; } var p2 = new Person("lk",11,function(){});
- 寄生继承、寄生组合继承
- 原型链
- 闭包
- 模块化
- 防止变量被破坏
- 函数的四种调用方式
- 函数调用
- 函数内部
this
指向window
- 函数内部
- 方法调用
- new 调用(构造函数)
- 上下文方式(
call
、apply
、bind
)-
call
、apply
方法的第一个参数决定函数内部this
的值,参数不同类型this
的值也不同(对象) -
bind
,函数.bind(数据)
,那么函数里面的this
就是这个值
-
- 函数调用
- 常见的问题
(1)CSS
- BFC块级格式上下文(5种情况)
- 预处理器Less、Sass
- 垂直居中方式(8种情况)
- 响应式布局
(2)html
- h5兼容问题,做过哪些浏览器兼容性处理
(3)js
- 原型与原型链
- 箭头函数,this指向
- 深拷贝与浅拷贝
- apply()与call()
- 数据类型的判断方法
- 去重方法
- 数组中最大值获取方式
(4)ES6
- 介绍新特性,各种新增方法
(5)vue技术栈
- 生命周期
- v-modal双向绑定原理
- vue-router原理
- vuex使用方式
- 父子组件通信
- 如何解决bug
- 做过哪些性能优化
- 跨域方式有哪些
- 是否搭建过项目
网友评论