JS小汇总

143 阅读3分钟

数据类型判断

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

区别varletconst
是否有块级作用域×✔️✔️
是否存在变量提升✔️××
是否添加全局属性✔️××
能否重复声明变量✔️××
是否存在暂时性死区×✔️✔️
是否必须设置初始值××✔️
能否改变指针指向✔️✔️×

暂时性死区,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()

image.png

闭包是什么

函数嵌套,内部函数调用了外部函数的变量,执行内部函数定义时形成了闭包。比如:防抖
特点:延长了外部变量的生命周期。
缺点:不即使释放会导致内存泄露,内存溢出。

简述原型链,原型

执行函数定义原型就产生了。作用:实现数据共享、继承、节省空间。

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