关于javascript:JavaScript总结

3次阅读

共计 10041 个字符,预计需要花费 26 分钟才能阅读完成。

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
正文完
 0