1.形容call、apply和bind的区别。
(1)bind会有一个返回值,返回值是函数体,因而须要加上()能力调用。(2)call、apply是没有返回值的,当扭转函数this指向时侯,函数就会执行,不须要加()调用。(3)call传递参数的时候是一个一个传递的,apply是传递一个转数组。(4)如果call和apply的第一个参数是null,那么this在node环境下指向的是global对象,在HTML中指向的是window对象
2.形容函数return 如果一个代码没有return回呈现什么问题?
(1)return的作用就是跳出函数,前面的的代码都不会再执行(2)如果没有return,就会始终在函数外部执行,直到运行完外部所有代码
3.什么是闭包?作用、长处和毛病。
(1)闭包:闭包就是可能读取其余函数外部变量的函数(2)闭包的作用: a.能够读取函数外部的变量 b.变量的值始终保留在内存中(3)长处:能够读取函数外部的变量,减少变量的应用。(4)毛病:因为变量的值始终保留在内存中,这会导致内存耗费很大。(5)闭包生成的三个条件 a.函数嵌套函数 b.外部函数援用了内部函数中的数据(属性、函数) c.参数和变量不会被回收
4.continue和break的区别
(1)break 跳出循环后就不再执行(2)continue 跳出以后循环,进行下一次循环
5.说一说ECMAScript和JavaScript的关系,阐明目前最新版本的JavaScript是那个版本
ECMAScript是javaScript的实现规范。目前最新的javaScript是9
6.形容什么是变量晋升?会呈现什么后果?
(1)只有var申明的才会产生变量晋升问题(2)js在变量申明晋升的时候会将var申明的变量以及用关键字函数申明函数,都会晋升到以后作用域的顶端,赋值语句在原地期待赋值。(3)会呈现undefined
7.JavaScript的组成部分
(1)ECMAScript:形容了该语言的语法和根本对象(2)文档对象模型(DOM): 形容解决网页内容的办法和接口(3)浏览器对象模型(BOM):形容与浏览器进行交互的办法和接口。
8.JavaScript能够运行在什么中央?
(1)浏览器(2)nodejs
9.JavaScript特点
(1)解释型语言 js->nodejs(解释器)(2)弱类型语言 变量的数据类型取决于值的数据类型(3)程序解释执行(4)既能够作为前端脚本语言,也能够作为后端语言,取决于利用平台和应用的框架。
9.在body和head中应用JavaScript的区别
(1)在body局部中的JavaScript会在页面加载的时候被执行,在head局部中的JavaScript会在被调用的时候才执行。(2)因为浏览器解析html是从上到下的。如果把JavaScript放在head里的话,则先被解析,但这时body还没有解析,所有会返回空值。(3)个别都会绑定一个监听,当全副的html文档解析完之后再执行代码window.onload = function(){ //这里放执行的代码}
10.JavaScript的数据类型
(1)根本数据类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)(2)援用数据类型:对象(Object)、数组(Array)、函数(Function)
11.undefined和null关系
(1)undefined继承null,所以undefined==null后果为true。然而null示意空对象,undefined示意未定义。所以undefined===null为false(2)null与undefined用处不同,null能够用来示意一个空对象,然而没有必要把一个变量的值显式设置为undefined。
12.什么是深拷贝和浅拷贝,怎么样进行浅拷贝?
(1)浅拷贝只是拷贝了援用地址,数据在内存中,如果援用的对象产生了变动,该变量也会同步变动(2)深拷贝相当于把内存上的数据拷贝了份,即地址和内容都拷贝。此时批改变量不会影响原来的变量。同理批改原来的变量也不会影响当初的变量(3)通过赋值=实现浅拷贝
13.实现深拷贝的办法
(1)通过JSON对象实现深拷贝(JSON.stringify,JSON.parse)(2)Object.assign()拷贝(3)lodash函数库实现深拷贝(4)递归的形式实现深拷贝
14.算数运算符(5个)
+ - * / %
15.一元运算符(8种)
(1) +(2) -(3) !(4) ++(5) --(6) delete(7) typeof(8) void
16.检测对象属性(3种)
(1)in 检测某属性是否是某对象的自有属性或者是继承属性(2)Object.prototype.hasOwnProperty() 检测给定的属性是否是对象对象的自有属性,对于继承属性返回false(3)Object.prototype.propertyIsEnumerable() 检测本身属性和可枚举属性
17.对象(Object)原型中罕用的办法
(1)constructor 保留用户创立以后对象的函数,与原型对象对应的构造函数(2)hasOwnProperty(propertyName) 查看给定的属性在以后对象实例中是否存在(3)propertyIsEnumerable(propertyName) 查看给定的属性在以后对象实例中式否存在(4)valueOf() 返回对象的字符串,数值,布尔值的示意(5)toLocaleString() 返回对象的字符串示意,该字符串与执行环境的地区对应(6)toString() 返回对象的字符串示意(7)isPrototypeOf(object) 查看传入的对象的原型
18.对象的数据属性个性
(1)configurable 是否可通过delete删除(2)enumerable 是否能够通过for-in循环返回属性(3)writable 是否可写(4)value 蕴含这个属性的数据值以上须要通过Object.defineProperty(对象,属性名,形容的函数)来进行批改
19.对象中读取属性的个性
(1)Object.getOwnPropertyDescriptor(对象,属性名称)(2)Object. getOwnPropertyDescriptors(obj)
20.函数的作用
(1)性能的封装(2)间接调用(3)代码复用率进步
21.函数外部的属性:arguments,解释什么是arguments
(1)arguments是一个类数组对象,蕴含着传入函数中的所有参数(2)arguments主要用途是保留函数参数,该对象还有一个名为callee的属性,该属性是一个指针,指向领有这个arguments对象的函数。callee属性是 arguments对象的一个成员,仅当相干函数正在执行时才可用。
22.this指向问题
(1)在办法中,this示意该办法所属的对象(2)如果独自应用,this示意全局对象(3)在函数中,this示意全局对象(4)在事件中,this示意接管事件的元素(5)在显示函数绑定时,咱们能够本人决定this的指向
23.IIFE(立刻执行函数)
作用 (1)页面加载实现后只执行一次的设置函数 (2)将设置函数中的变量包裹在部分作用域中,不会泄露成全局变量。
24.函数申明和IIFE的区别?
(1)在函数申明中,咱们首先看到的是function关键字,而IIFE咱们首先看到的是右边的(。也就是一对()将函数的申明括起来,使得JS编译器不再认为这是一个函数申明,而是一个IIFE。即须要立即执行申明得函数(2)两者达到得目标是雷同的,都是为了申明一个函数并且随后调用函数。
25.为什么须要IIFE?
IIFE的呈现是为了补救JS(ES5)在作用域方面的缺点:JS只有全局作用域、函数作用域,从ES6开始才有块级作用域。
26.作用域
(1)函数作用域 在JavaScript函数中申明的变量,会成为函数的局部变量 函数外部申明的变量,在函数内部不能拜访(2)全局作用域 函数之外申明的变量,会成为全局变量 函数内部申明的变量,在函数外部能够拜访 当函数嵌套,在这个时候,外部函数与内部函数的这个变量就组成了闭包(3)作用域最大的益处就是隔离变量,不同作用域下同名变量不会有抵触。
27.回调函数的作用
(1)回调函数个别都用在耗时操作下面(2)因为主函数不必期待回调函数执行完,就能够接着执行本人的代码(3)比方Ajax申请,解决文件等
28.数组的属性和办法
(1)toString() 在默认状况下都会以逗号分隔字符串的模式返回数组项(2)join() 应用指定的字符串用来分隔数组字符串(3)Array.isArray() 用来判断某个变量是否是一个数组对象(4)Array.from() 从类数组对象或可迭代对象中创立一个新的数组实例(5)Array.of() 依据一组参数来创立新的数组实例,反对任意的参数数量和类型(6)Array.prototype.push() 向数组的开端增加一个或多个元素,并返回新的长度。(7)Array.prototype.pop() 删除数组的最初一个元素并返回删除的元素(8)Array.prototype.shift() 把数组的第一个元素从其中删除,并返回第一个元素的值(9)Array.prototype.unshift() 向数组的结尾增加一个或更多元素,并返回新的长度(10)Array.prototype.reverse() 颠倒数组中元素的程序(11) Array.prototype.sort() 用于对数组的元素进行排序(12) Array.prototype.concat() 用于连贯两个或多个数组(13) Array.prototype.slice() 可从已有的数组中返回选定的元素(14) Array.prototype.splice() 用于增加或删除数组中的元素(15) Array.prototype.indexOf() 返回数组中某个指定的元素地位(16) Array.prototype.lastIndexOf() 返回一个指定的元素在数组中最初呈现的地位,从该字符串的前面向前查找。(17)Array.prototype.every() 用于检测数组所有元素是否都合乎指定条件(18)Array.prototype.some() 用于检测数组中的元素是否满足指定条件(函数提供)(19)Array.prototype.filter() 创立一个新的数组,新数组中的元素是通过查看指定数组中符合条件的所有元素。(20)Array.prototype.map() 返回一个新数组,数组中的元素为原始数组元素调用函数解决后的值(21)Array.prototype.forEach() 用于调用数组中的每个元素,并将元素传递给回调函数
29.什么是正则表达式?
(1)正则表达式时由一个字符序列造成的搜寻模式(2)当你在文本中搜寻数据时,你能够用搜寻模式来形容你要查问的内容。(3)正则表达式能够是一个简略的字符,或一个更简单的模式(4)正则表达式可用于所有文本搜寻和文本替换
30.正则表达式的实例办法
(1)exec() 可用来匹配字符串中合乎正则表达式的字符串,匹配到时时,返回值一个数组:[匹配的内容,index:在str中匹配的起始地位,input:参数字符串,groups:undefined],匹配不到返回Null。(2)test() 用来测试待检测的字符串中是否有能够匹配到正则表达式的字符串,如果有返回true,否则返回false。(3)toString() 把正则表达式的内容转化成字面量模式字符串(4)toLocaleString() 把正则表达式的内容转化成有本地特色的字符串(JS中没成果)(5)valueOf() 返回正则表达式自身
31.正则表达式的实例属性
(1)lastIndex 当没设置全局匹配时,改属性值始终为0,开启了全局匹配后,每次正则查找的终点就是lastIndex。(2)ignoreCase 是否疏忽大小写(3)global 全局匹配(4)multiline 多行匹配(5)source 返回字面量模式的正则表达式
32.String对正则表达式的反对
(1)search() 查找字符串中是否有匹配正则的字符串,有则返回字符串第一次呈现的地位,无则返回null。(2)match() 匹配字符串中合乎正则表达式的字符串,并返回该字符串的一个数组,其中包含字符串内容、地位(3)split() 以某种模式宰割字符串(4)replace() 满足正则表达式条件的内容将被替换掉。
33.根本包装类型为多少
(1)Boolean(2)Number(3)String
34.JS什么时候会主动创立一个对应的根本包装类型?
(1)取决于以后执行的代码是否是为了获取他的值。(2)每当读取一个根本类型的值,也就是咱们须要从内存中获取到它的值时(这个过程称为读取模式),这时,后盾就会主动创立一个根本包装类型
35.援用类型和根本包装类型有什么不同呢?
(1)援用类型:应用new操作符创立的援用类型实例,在执行流来到以后作用域之前始终都保留在内存中。(2)根本包装类型:只存在一行代码的执行霎时,而后立刻销毁。
36.怎么样能力给根本类型增加办法或者属性呢?
(1)减少对应的包装对象的原型办法(2)应用new运算符创立String/Number对象
37.Number类型的内置属性和内置办法(罕用)
内置属性(1)MAX_VALUE 可示意的最大的数(2)MIN_VALUE 可示意的最小的数(3)NaN 非数字值(4)NEGATIVE_INFINITY 负无穷大,溢出时返回该值(5)POSITIVE_INFINITY 正无穷大,溢出时返回该值(6)prototype 使您有能力向对象增加属性和办法内置办法(1)toString() 把数字转换为字符串,应用指定的基数(2)toLocaleString() 把数字转换为字符串,应用本地数字格局程序(3)toFixed() 把数字转换为字符串,后果的小数点后有指定位数的数字(4)toExponential() 把对象的值转换为指数计数法(5)toPrecision() 办法可在对象的值超出指定位数时将其转换为指数计数法(6)valueOf() 返回一个Number对象的根本数字值
38.String类型的对象属性和办法(罕用)
对象属性(1)constructor 对创立该对象的函数的援用(2)length 字符串的长度(3)prototype 容许您向对象增加属性和办法对象办法(1)charAt(index) 返回指定索引地位的字符串(2)charCodeAt(index) 以Unicode编码模式返回指定索引地位的字符串(3)concat() 连贯字符串(4)slice() 提取字符串,并以新的字符串返回被提取的局部(5)substring() 提取字符串中两个指定的索引号之间的字符(6)substr() 从起始索引号提取自负串中指定数目的字符(7)indexOf(str,n)从n开始搜寻的索引值返回(8)lastIndexOf(str,n) 从n开搜寻最初一个str,并将搜寻的索引值返回(9)toLowerCase() 把字符串转换为小写(10)toUpperCase() 把字符串转换为大写(11)toLocaleLowerCase() 把字符串转换为小写。本地化(12)toLocaleUpperCase() 把字符串转换为大写。本地化(13)match() 找到一个或多个正则表达式的匹配(14)replace() 替换于正则表达式匹配的子串(15)search() 检索与正则表相匹配的值(16)split() 把字符串宰割为字符数组
39.Math对象罕用的属性和办法
内置属性(1)E 返回算术常量 e,即自然对数的底数(约等于2.718)(2) LN2 返回 2 的自然对数(约等于0.693)(3) LN10 返回 10 的自然对数(约等于2.302)(4) LOG2E 返回以 2 为底的 e 的对数(约等于 1.414)(5) LOG10E 返回以 10 为底的 e 的对数(约等于0.434)(6) PI 返回圆周率(约等于3.14159)(7) SQRT1_2 返回返回 2 的平方根的倒数(约等于 0.707)(8) SQRT2 返回 2 的平方根(约等于 1.414)对象办法(1) Math.min() 求一组数中的最小值(2) Math.max() 求一组数中的最大值(3) Math.ceil() 向上舍入(4) Math.floor() 向下舍入(5) Math.round() 四舍五入(6) Math.random() 随机数 返回大于0小于1的一个随机数[0,1)
40.什么是工厂模式 ?
工厂模式是一种家喻户晓的设计模式,广泛应用于软件工程畛域,用于形象创立特定对象的过程。工厂模式是一种创立型模式,简略来说,工厂模式就是创建对象的一种形式
41.工厂模式有什么用?
作用:(1)创建对象(2)升高代码冗余度
42. 为什么用工厂模式?
从工厂模式的作用来看,工厂模式的次要作用就是用来生对象的。
43.用字面量的形式创建对象有什么毛病?
用字面量的形式来创建对象,最大的毛病就是,这个对象是一次性的,如果有四十个同学,这个代码就要写四十次,有点小麻烦。
44.用构造函数创建对象有什么毛病?
能够发现它是先实例化了一个对象,而后再为对象增加属性,这样就看不出来是一个整体(像用字面量创立的话,属性都在一个大括号外面,这样就很好看出是一个整体)。因而,咱们为了使创建对象更加不便(不像字面量创立那样一次性),也为了写的代码更像个整体,就能够交给工厂模式来做。
45.工厂模式的优缺点?
(1)长处:只有咱们往工厂函数外面塞参数,工厂函数就会像生产产品一样造集体进去。(2)毛病:这种形式实质上是将创立的对象进行了封装,实质并没有扭转,咱们创立一个student时无奈晓得其具体的数据类型,只晓得这是一个对象,往往理论开发中咱们须要确定这个对象到底是个Person的实例还是Dog的实例
46.js外面的内置函数及对象有哪些
(1)对象:Array Object Date String Number Boolean ... RegExp (2)函数:slice() splice() join() toString() sort() concat() reverse() isNaN() isFinite()
47.css3布局机制
(1)动态布局(static)(2)浮动布局(float)(3)定位布局(position)(4)弹性布局(flex)(5)网格布局(grid)
48.写出10条linux常用命令并解释
(1)who am i //查看以后用户(2)adduser 用户名 //增加用户(3)addgroup 组名 //增加组(4)cat /etc/passwd //查看用户信息(5)cat /etc/group //查看组信息(6)su //切换用户(7)pwd //查看以后所在门路(8)cd //切换到指定目录中(9)ls //查看当前目录下的目录或者文件(10)touch 文件名 //创立文件或者更改最近拜访工夫
49.写出5条罕用git命令并解释
(1)git init //初始化(2)git add . //提交文件到缓存区(3)git commit -m "提交页面备注" --no-verify //提交备注(4)git pull origin master //更新状态(5)git push -u origin master //提交状态
50.阿里云在咱们开发中表演什么角色
阿里云能够提供一个近程服务器,能够应用它进行linux学习,js学习,也能够用于搭建集体网站。阿里云等云服务器个别作为我的项目的部署服务器,须要在阿里云上装置一些我的项目部署的环境,须要把握根本的命令操作和vim操作。
51.简述事件流和事件冒泡
事件流形容的是从页面中接管事件的程序。事件产生时会在元素节点与根节点之间依照特定的程序流传,门路所通过的所有节点都会收到该事件,这个流传过程即DOM事件流IE的事件流叫做事件冒泡(event bubbling),即事件开始时有最具体的元素(文档中嵌套档次最深的那个节点)接管,而后逐级向上流传到较为不具体的节点
52.事件代理机制
事件代理机制利利用冒泡的原理,把事件加到父级上,通过判断事件起源的子集,执行相应的操作。能够只应用一个事件处理程序来治理一种类型的事件
53.对一个数组应用算法排序 var arr=[1,3,5,7,6,9];
arr.sort(function(a, b){ return a-b;})
54.写出5个Math实例能够调用得办法
(1)Math.sqrt() //求平方根(2)Math.min() //求一组数中的最小值(3)Math.max() //求一组数中的最大值(4)Math.ceil() //向上舍入(5)Math.floor() //向下舍入(6)Math.round() //四舍五入(7)Math.random() //随机数
54.函数的调用形式有几种,并阐明他们的区别?
(1)作为函数调用(2)作为办法调用(3)作为结构函数调用(4)作为函数办法调用
55.==和===有什么区别?
==只有值相等即可为真,而===则不仅要值相等,还要类型雷同。
56.DOM中怎么追加、插入、移除、复制和获取节点
(1)追加:document.body.appendChild(p);(2)插入: parentDiv.insertBefore(new, old);(3)移除:span1.parentNode.removeChild(span1);(4)复制:var dupNode = node.cloneNode(deep);(5)获取:document.getElementById(id) document.getElementsByTagName(name) document.getElementsByClassName(name) document.querySelector() document.querySelectorAll()
57.谈谈你对于原型和原型链的了解?
js通过原型链来继承,在原型链中的办法,实例能够调用。
58.ajax是什么?你在开发中如何应用ajax?
ajax是异步的JavaScript和XML。用来进行异步申请。浏览器能够向服务器发送一个ajax申请,进行页面的部分刷新
59.typeof返回值
number string boolean undefined function object NaN
60.简述CSS盒子模型
margin(外边距)、border(边框)、padding(内边距)、content(内容)内容盒子:width和height仅示意内容区域所占的宽高 内容宽:width 内容高:height 盒子宽:width+paddingLeft+paddingRight+borderLeft+borderRight 盒子高:height+paddingTop+paddingBottom+borderTop+borderBottom 占屏宽:width+paddingLeft+paddingRight+borderLeft+borderRight+marginLeft+marginRight 占屏高:height+paddingTop+paddingBottom+borderTop+borderBottom+marginTop+marginBottom边框盒子:width和height示意整个盒子的宽高 内容盒子:width和height仅示意内容区域所占的宽高 内容宽:width-paddingLeft-paddingRight-borderLeft-borderRight 内容高:height-paddingTop-paddingBottom-borderTop-borderBottom 盒子宽:width 盒子高:height 占屏宽:width+marginLeft+marginRight 占屏高:height+marginTop+marginBottom
61.css选择器的优先级如何计算?
间接选中(继承) 如果是间接选中, 那么就是谁离指标标签比拟近就听谁的 雷同选择器(间接选中) 如果都是间接选中, 并且都是同类型的选择器, 那么就是谁写在前面就听谁的 不同选择器(间接选中) 如果都是间接选中, 并且不是雷同类型的选择器, 那么就会依照选择器的优先级来层叠 id>类>标签>通配符>继承>浏览器默认 !important