加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

经典Web面试题(JS篇)

(2022-08-24 11:38:57)
标签:

h5前端培训

java培训

ui设计培训

菁瑞优智

it

学IT到成都菁瑞优智

1 JS 支持哪些数据类型JS 支持的数据类型: 

 Undefifined 

 Null 

 Boolean 

 String 

 Symbol 

 Number 

 Object 

2、 typeof返回的数据类型 

'string','number','boolean','undefifined','symbol'但判断 typeof(null) 时值为 'object'; 判断数组和对象时值均为 'object' 

3、 Object.is()与原来的比较操作符"==="、"==” 的区别? 

(1)两等号判等,会在比较时进行类型转换; 

(2)三等号判等(判断严格),比较时不进行隐式类型转换,(类型不同则会返回false); 

(3)Object.is 在三等号判等的基础上特别处理了NaN、-0和+0,保证-0和+0不再相同,但Object.is(NaN, NaN)会返回true。Object.is应被认为有其特殊的用途,而不能用它认为它比其它的相等对比更宽松或严格。 

4、 JS 中 == 和 === 区别是什么? 

1、对于string,number等基础类型,==和===有区别 

1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不 等。

2)同类型比较,直接进行“值”比较,两者结果一样。 

2、对于Array,Object等高级类型,==和===没有区别进行“指针地址”比较。 

3、基础类型与高级类型,==和===有区别 

1)对于==,将高级转化为基础类型,进行“值”比较。2)因为类型不同,===结果为false。 

5、 ES5 和 ES6 分别种方式声明变量 

ES5 有俩种:var 和 functionES6 有六种:增加四种,let、const、class 和 import 

注意:let、const、class声明的全局变量再也不会和全局对象的属性挂钩。 

6、 什么是事件代理/事件委托? 

事件代理/事件委托是利用事件冒泡的特性,将本应该绑定在多个元素上的事件绑定在他们的祖先元素上,尤其在动态添加子元素的时候,可以非常方便的提高程序性能,减小内存空间。 

7、 什么是事件冒泡?什么是事件捕获? 

冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。 

捕获型事件:事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。 

在添加事件时用addEventListener(event,fn,useCapture)方法,基中第3个参数useCapture是一个Boolean值,用来设置事件是在事件捕获时执行,还是事件冒泡时执行。 

注意:IE浏览器用attachEvent()方法,此方法没有相关设置,不过IE的事件模型默认是在事件冒泡时执行的,也就是在useCapture等于false的时候执行,所以把在处理事件时把useCapture设置为false是比较安全,也实现兼容浏览器的效果。 

8、 如何阻止默认事件? 

w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false,比如: 

functionstopDefault( e ) { if ( e && e.preventDefault ) e.preventDefault(); //IE中阻函数器默认动作的方式 elsewindow.event.returnValue = false; 

return false也能阻止默认行为。 

9、 DOM 事件有哪些阶段?谈谈对事件代理的理解 

分为三大阶段:捕获阶段--目标阶段--冒泡阶段 

事件代理简单说就是:事件不直接绑定到某元素上,而是绑定到该元素的父元素上,进行触发事件操作时(例如'click'),再通过条件判断,执行事件触发后的语句(例如' 

好处:(1)使代码更简洁;(2)节省内存开销 

10、 如何用原生js给一个按钮绑定两个onclick事件? 

使用addEventListener的方式来绑定多个事件。例如 

var btn = document.getElementByIdx_x('btn')btn.addEventListener('click', fn1)btn.addEventListener('click', fn2)functionfn1 () {console.log('我是方法1') }functionfn2 () {console.log('我是方法2') 

1 1、 什么是闭包?举个例子 

只要在某个内部作用域内访问在当前作用域之外定义的变量,就会创建闭包。 它允许你从内部函数访问外部函数的作用域。 在JS中,每次创建函数时都会创建闭包。 要使用闭包,只需在另一个函数内定义一个函数并暴露它。

12、 谈谈this的理解 

1) this总是指向函数的直接调用者(而非间接调用者) 

2) 如果有new关键字,this指向new出来的那个对象 

3) 在事件中,this指向目标元素,特殊的是IE的attachEvent中的this总是指向全局对象window

13、 javascript中this的指向 

this永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。 

普通的函数调用,函数被谁调用,this就是谁。 

构造函数的话,如果不用new操作符而直接调用,那即this指向window。用new操作符生成对象实例后,this就指向了新生成的对象。 

匿名函数或不处于任何对象中的函数指向window 。 

如果是call,apply等,指定的this是谁,就是谁。 

14、 new操作符具体干了什么呢? 

1) 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。 

2) 属性和方法被加入到 this 引用的对象中。 

3) 新创建的对象由 this 所引用,并且最后隐式的返回 this 。 

15、 call,apply,bind的区别 

call apply bind都可以改变函数调用的this指向。 

函数.call(对象,arg1,arg2....)函数.apply(对象,[arg1,arg2,...])var ss=函数.bind(对象,arg1,arg2,....) 

1.第一个参数都是指定函数内部中this的指向(函数执行时所在的作用域),然后根据指定的作用域,调用该函数。 

2.都可以在函数调用时传递参数。call,bind方法需要直接传入,而apply法需要以数组的形式传入。 

3.call,apply方法是在调用之后立即执行函数,而bind方法没有立即执行,需要将函数再执行一遍。 

4.改变this对象的指向问题不仅有call,apply,bind方法,也可以使用that变量来固定this的指向。 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有