数据类型判断
typeof(不能判断出null跟[])
instanceOf()检测null跟undefined都是false,检测data,正则都是object。原理:右边的原型对象是不是在左边的原型链上
Object.prototype.toString.call()可以判断所有,返回【object 类型】
constructor(除了null跟undefined都可以检测)
判断undefined,可以if(x===void 0)
JavaScript属于什么类型的语言?JavaScript属于动态语言,弱类型语言(支持隐式类型转换),单线程。
八种数据类型 Number,string,boolean,null,undefined,object,symbol,bigint
虚值和真值
虚值(Falsy)
长度为 0 的字符串。
数字 0
false
undefined
null
NaN
真值(Truthy)
· 空数组
· 空对象
· 其他
var 跟const跟let
| 区别 | var | let | const |
|---|---|---|---|
| 是否有块级作用域 | × | ✔️ | ✔️ |
| 是否存在变量提升 | ✔️ | × | × |
| 是否添加全局属性 | ✔️ | × | × |
| 能否重复声明变量 | ✔️ | × | × |
| 是否存在暂时性死区 | × | ✔️ | ✔️ |
| 是否必须设置初始值 | × | × | ✔️ |
| 能否改变指针指向 | ✔️ | ✔️ | × |
暂时性死区,let,const还没声明变量就用变量,报referenceerror
高阶函数
ES6新特性
字符串拼接的所有方法
concat(),join(),+号运算符
join与spilt
[1,2,3].join('-')//'1-2,3' 数组转字符串
'1-2-3'.split('-')//[1,2,3] 字符串转数组
获取字符串子串的所有方法,以及参数,若果超过长度会如何,如果是负数会如何
Substr(start,length)。Substring(start,end),slice()
闭包是什么
函数嵌套,内部函数调用了外部函数的变量,执行内部函数定义时形成了闭包。比如:防抖
特点:延长了外部变量的生命周期。
缺点:不即使释放会导致内存泄露,内存溢出。
简述原型链,原型
执行函数定义原型就产生了。作用:实现数据共享、继承、节省空间。
student.prototype=new Person()
实例对象的__proto__指向当前实例对应的构造函数的prototype。构造器指向的是构造函数。
student上实例zs,当调用他的一个属性或方法时,他自己没有这个属性和方法,就通过__proto__来访问原型上看看有没有该属性和方法,没有就继续找原型上的__proto__直到顶层的null位置
作用域
全局作用域、函数作用域、块级作用域
函数内部定义变量函数只能在内部访问,执行完后销毁
作用域链:从当前作用域逐渐往上找
作用域=》预解析=》执行上下文(找关键字var,function确认this)
js中面向对象的概念
call、apply、bind的作用
改变this的指向,apply第二个参数是数组
引用类型和基本类型有哪些区别
实现继承原理,另外有什么区别
slice和splice
slice(开始位置,截取位置不包括自己,item添加元素)不会改变原数组,concat、map、filter也不会改变
splice(开始位置,截取长度)会改变原数组
pop(删最后)、push(加最后)、unshift(加第一)、shift(删第一)都会改变原数组
document.load和document.ready
load指包含图片内的所有元素加载完毕后执行js,ready不包括图片内的所有元素加载完毕后执行js
js事件流模型
事件捕捉、目标阶段、事件冒泡
调用static静态方法
this指向类本身Dog.dog()
foreach,for of,for in
foreach如果return仅仅跳出当前循环
js外部调用内部局部变量
在函数内部加返回值或者window.a=a,或者原型
this,为什么要修改this
定时器this是window,如果不用箭头函数就会指向window
Array.from和Array.of
前者将对象转为数组,后者将一组值转为数组。
浅拷贝与深拷贝
浅拷贝属性为对象时,是赋值,两对象指向同一个地址,互相影响 深拷贝属性为对象时,是新开栈,指向不同地址,不会互相影响。
数组部分方法
concat()字符串拼接、trim()删除前后空格
删除slice(),substr(),substring()
tolowercase(),touppercase()转为大小写
charAt()返回给定字符
继承的多种方法
改变原型指向。借用构造函数、拷贝、extends