JavaScript需要了解的知识

129 阅读6分钟

Es6语法

image.png

js基础

1.介绍js的基本数据类型

UndefinedStringNumberBooleanNull

2.介绍js有哪些内置对象

Object是js中所有对象的父对象

数据封装类对象:
Object,Array,Number,Boolean,String

其他对象:
FunctionArguments,Math,Date,Regexp,Error

3.JavaScript原型,原型链?有什么特点?

   每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,
   如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又
   会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。

4.JavaScript有几种类型的值?你能画一下他们的内存图吗?

栈:原始数据类型(Undefined,Null,Boolean,Stting,Number)

堆:引用数据类型(function,Object,Array)

5.JavaScript继承的几种实现方式?

  1. 构造函数继承,使用call和apply两个方法的特性可以实现,改变方法中的this
  2. 原型链继承
  3. 组合式继承

6.JavaScipt 作用域链

首先在js中有作用域的概念,指得就是一个变量的活动范围,分为全局作用域和局部作用域,全局作用域指的是window,局部作用域指的是每一个函数内部,在作用域中查找一个变量首先在自己当前作用域查找找不到向上级查找,逐层向上找到window为止,找不到就会抛出一个错误,这个查找的过程就叫作用域链,作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的。作用域链有一个需要要注意的问题就是变量提升,当一个变量的使用在定义之前的时候就会得到一个undefined值,在es6中则不会出现这个问题,es6不允许在定义之前使用

7.谈谈你对this的理解

this分为几个不同的使用场景,在function中this指的的是window,如果是实用new 调用的话this指的是当前的实例化对象,在事件调用函数中this指的调用事件的window特殊的是在IE中的attachEvent中的this总是指向全局对象Window,在定时器中this指的是window,在es6中有一个箭头函数,在箭头函数中this永远指向的是父级对象

8.什么是window对象?什么是document对象?

window:它是一个顶层对象,而不是另一个对象的属性,即浏览器的窗口。 document:代表整个HTML文档,可用来访问页面中的所有元素。

9.null,undefined的区别?

null 表示一个对象被定义了,值为空值; undefind 表示不存在这个值

10.IE与火狐的时间机制有什么区别?如何阻止冒泡?

  1. 我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。 

  2. 事件处理机制:IE是事件冒泡、Firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件; 

  3. ev.stopPropagation();(旧ie的方法 ev.cancelBubble = true;)

11. 什么是闭包(closure)?为什么要用它?

闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。 闭包的特性:

1,函数内再嵌套函数

2,内部函数可以引用外层的参数和变量

3,参数和变量不会被垃圾回收机制回收

闭包的使用场景

常见的闭包的使用场景就是模块化,用来做模块内部的实现通过接口的扩展贡其他模块使用

在就是闭包可以用来缓存值,减少不必要的技术,例如vue里面的计算属性

12.JavaScript 代码中的“use strict” 是什么意思?使用他的区别是什么?

use strict是一种ECMAscript 5 添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行。 使JS编码更加规范化的模式,消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为。 提高编译器效率,增加运行速度; 为未来新版本的Javascript标准化做铺垫。

13.如何判断一个对象是否属于某个类?

使用instanceof

if(a instanceof Person){alert('yes')}

14.Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

hasOwnproperty javaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。

使用方法:

object.hasOwnProperty(proName)

15.JSON的理解?

JSON(JavaScript Object Notation)是一种轻量的数据交换格式。 它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小

JSON字符串转成JSON对象: JSON.parse(obj) JSON对象转成JSON字符串 JSON.stringify(obj)

16.document.write 和 innerHTML的区别是什么?

document.write是重绘整个页面 innerHTML只会去重绘页面的一部分

17 DOM操作——怎样添加、移除、移动、复制、创建和查找节点?

1) 创建新节点

createDocumentFragment()    //创建一个DOM片段

createElement()   //创建一个具体的元素

createTextNode()   //创建一个文本节点

1) 添加、移除、替换、插入

appendChild()

removeChild()

replaceChild()

insertBefore() //在已有的子节点前插入一个新的子节点

1) 查找

getElementsByTagName()    //通过标签名称

getElementsByName()    //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)

getElementById()    //通过元素Id,唯一性

18. .bind .call .apply 的区别?

在说区别之前总结一下他们的相同之处 1、都是用来改变函数的this对象的指向的。

2、第一个参数都是this要指向的对象。

3、都可以利用后续参数传参。 关于call()和apply()我的理解就是,它们的作用:让函数在某个指定的对象下执行上下文。 call()在第一个参数之后的  后续所有参数就是传入该函数的值。apply() 只有两个参数,第一个是对象,第二个是数组,这个数组就是该函数的参数。

bind() 方法和前两者不同在于: bind() 方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数。他的参数和call()相同。