js考纲(三十道)

ES6

一.let,var和const
var 存在提升,我们能在声明之前使用。let、const 因为暂时性死区的原因,不能在声明前使用
var 在全局作用域下声明变量会导致变量挂载在 window上,其他两者不会
let 和 const 作用基本一致,但是后者声明的变量不能再次赋值

二.字符串扩展方法
includes()
startWith()
endWith()

三.剩余运算符与展开运算符

function fun(...args){
	console.log(args)
}
fun(1,2,3,4)
const arr =['foo','bar','baz']
console.log(...arr)

四.箭头函数
箭头函数内部不改变this指向

五.Object.assign

Object.assign({a:1},{b:2})

浅拷贝

六.Object.is
同位运算符

Object.is(+0,-0)
Object.is(NaN,NaN)

七.class,static和extends

八.Set数据结构

var s = new Set([1,2,3,'3',4]);
            //添加一个key
            s.add(5);
            //重复元素在Set中自动被过滤
            s.add(5);
            console.log(s);//Set {1, 2, 3, 4,5}
            //删除一个key
            s.delete(2);
            console.log(s);//Set{1, 3, "3", 4, 5}//注意数字3和字符串'3'是不同的元素。

九.Map数据结构
map和object的区别
键的类型
map:一个 Map的键可以是任意值,包括函数、对象或任意基本类型。
object:一个Object 的键必须是一个 String 或是Symbol。
键的顺序
Map 中的 key 是有序的。
一个 Object 的键是无序的。
Size
Map 的键值对个数可以轻易地通过size 属性获取
Object 的键值对个数只能手动计算

十.Symbol数据类型
最主要的作用:为对象添加独一无二的属性标识符。

十一.bigInt数据类型
在JavaScript中的基本数据类Number是双精度浮点数,它可以表示的最大安全范围是正负,也就是2的53次方减一, 比253大的所有数字则可以使用BigInt表达。

BigInt是JavaScript中的一个新的原始类型,可以用任意精度表示整数。使用BigInt,即使超出JavaScript Number 的安全整数限制,也可以安全地存储和操作大整数。

十二.for of遍历
for in是ES5标准,遍历key(属性名),并且原型链上的所有属性也会被遍历,不适合遍历数组
for of 是ES6标准,遍历value(属性值),不适合遍历object

Js

一.JS共有几种数据类型
五种基本数据类型:Number 数字类型 String 字符串类型 underfined 未定义(只声明变量时的默认值)
null 空指针对象(一般用于准备存储对象) Boolean 布尔类型
复制数据类型:Object 对象类型

二. == 和 === 的区别?
类型相同:前者仅判断数据的值,而后者是先判断数据的类型相同前提下,判断数据的值
类型不相同:
两个都为基本类型时:==会转化成相同的类型,优先为数字类型,再比较。
一个基本类型和一个引用类型时:会将对象转化为它的原始值(自动调用Object.prototype.valueOf)
两个引用类型:判断两者之间的引用地址。

三.isNaN怎么用?

四.arguments对象
所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有的实参。arguments是一个伪数组,可以遍历。

五.原型和原型链
实例对象的proto指向它的原型对象,它的原型对象的proto属性指向Object原型对象,Object的_proto_属性指向null。

六.call,apply和bind
call方法:第一个参数可以指定函数的this,可以执行函数
apply方法:作用和call方法一样,不同的地方是第二个参数是函数参数组成的数组。
bind方法:作用和call方法一样,不同的地方是不会去执行函数,返回一个指定了this的函数(绑定函数)

七.说一下闭包
函数定义时天生就能记住自己生成的作用域环境和函数自己,将它们形成一个密闭的环境,这就是闭包。
作用:可以在函数外部读取函数内部的成员,让函数内成员始终存活在内存中。

八.说一下作用域链
作用域:变量可以起作用的范围,变量退出作用域之后会有销毁,全局变量关闭网页销毁。
首先会有一个全局作用域,凡是代码中有函数,那么这个函数就会构成另一个作用域,如果函数中还有函数,那么这个作用域就又诞生一个作用域。
将这样的所有作用域列出来,可以有一个结构:函数内指向函数外的链式结构,这就是作用域链。
程序在遇到一个变量时,使用作用域查找顺序,不同层次的函数内部都有可能定义相同名字的变量,它会优先从自己所在层作用域查找变量,如果当前层没有变量定义,会按顺序从本层到外依次查找,直到找到了第一个变量定义。整个过程会发生内层变量遮蔽外层变量的效果,被称为“遮蔽效应”。

九.变量声明提升
在预解析中,所有定义的变量都会将声明的过程提升到所有的作用域最上面,在将来的代码执行过程中,按照先后顺序会执行被提升的声明变量过程。
提升过程中,只提升声明过程,不提升变量赋值,相当于变量定义未赋值,变量存储underfined值。

十.typeof 于 instanceof 区别
typeof 对于基本类型,除了 null都可以显示正确的类型
typeof 对于对象,除了函数都会显示 object
对于 null 来说,虽然它是基本类型,但是会显示 object,这是一个存在很久了的 Bug

instanceof 可以正确的判断对象的类型,因为内部机制是通过判断对象的原型链中是不是能找到类型的 prototype

十一.如何判断数组的数据类型?

十二.new方法执行时会做的四件事
1.new会在内存中创建一个新的空对象
2.new会让this指向这个新对象
3.执行构造函数目的:给这个新对象加属性和方法
4.new会返回这个新对象

十三.获取标签内部内容的属性
innerHTML属性,在获取标签内部内容时,如果包含标签,获取的内容会包含标签,获取的内容包含空白换行。
innerText属性,在获取标签内部内容时,如果包含标签,获取的内容会过滤标签,获取的内容会去掉换行。

十四.事件流
事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程就叫做DOM事件流。
DOM事件流分为三个阶段:
捕获阶段:事件从window发出,自上而下向目标节点传播的阶段
目标阶段:真正的目标阶段正在处理事件的阶段
冒泡阶段:事件从目标节点自下而上向window传播的阶段

十五.事件委托
可以将一些子级的公共类型的事件委托给他们的父级添加,在父级内部想办法找到真正触发事件的底层事件源,在事件函数中,e.target属性记录的就是真正触发的事件源。

十六.对象是如何继承?

十七.this指向

十八.实现函数防抖

十九.实现函数节流

二十.深浅拷贝

二十一.说说addListener

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值