前端面试题-JS篇01

1、javascript 的 typeof 返回哪些数据类型

object number function boolean underfind string

2、例举 3 种强制类型转换和 2 种隐式类型转换?

强制转换:parseInt(),parseFloat(),Number()

隐式转换:== , ===

3、split() join() 的区别

前者是切割成数组的形式, 后者是将数组转换成字符串

4、数组方法 pop() push() unshift() shift()

Push()尾部添加 pop()尾部删除 Unshift()头部添加 shift()头部删除

5、事件绑定和普通事件有什么区别

事件绑定相当于在一个元素上进行监听,监听事件是否触发。
1、 如果说给同一个元素绑定了两次或者多次相同类型的事件,所有的绑定将会依次触发 2、 支持 DOM 事件流的 3、 进行事件绑定传参不需要 on 前缀
普通事件就是直接触发事件。
1、如果说给同一个元素绑定了两次或者多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 2、不支持 DOM 事件流 事件捕获阶段=>目标元素阶段=>事件冒泡阶段

6、IE 和 DOM 事件流的区别

1.执行顺序不一样
IE不支持冒泡
DOM先捕获后冒泡
2.参数不一样
attachEvent接受两个参数,第一个参数是事件名称,第二个fnHandler是回调处理函数
addEventListener方法接受三个参数:
第一个参数是事件名称,值得注意的是,这里事件名称与IE的不同,事件名称是没’on’开头的;
第二个参数fnHandler是回调处理函数;
第三个参数注明该处理回调函数是在事件传递过程中的捕获阶段被调用还是冒泡阶段被调用
3.事件加不加 on
IE9 以前:attachEvent(“onclick”)、detachEvent(“onclick”)
IE9 开始跟 DOM 事件流是一样的,都是 addEventListener
4.this 指向问题
IE下利用attachEvent注册的处理函数调用时this指向不再是先前注册事件的元素,这时的this为window对象了
它可以在一个DOM元素上绑定多个事件处理器,并且在处理函数内部,this关键字仍然指向被绑定的DOM元素,另外处理函数参数列表的第一个位置传递事件event对象

7、IE 和标准下有哪些兼容性的写法

var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
var target = ev.srcElement||ev.target

8、call 和 apply 的区别

call和apply 都是用来修改函数中this的指向问题,不同之处在于传递的参数,apply最多只能有两个参数——新this对象和一个数组argArray,如果arg不是数组则会报错TypeError;call则可以传递多个参数,第一个参数和apply一样,是用来替换的对象,后边是参数列表

9、b 继承 a 的方法

原型链方式:即子类通过prototype将所有在父类中通过prototype追加的属性和方法都追加到Child,从而实现了继承(利用原型让一个引用类型继承另外一个引用类型的属性和方法)
构造函数继承:在子类型构造函数的内部调用超类构造函数,通过使用call()和apply()方法可以在新创建的对象上执行构造函数
组合继承(混合继承):将原型链和借用构造函数的技术组合在一块,从而发挥两者之长的一种继承模式。
寄生式继承:创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再像真正是它做了所有工作一样返回对象。
寄生组合式继承:通过借用函数来继承属性,通过原型链的混成形式来继承方法

10、JavaScript this 指针、闭包、作用域

this:构造函数中的this代表new出来的对象;事件处理函数,this代表事件绑定的对象;没有明确绑定对象的函数中的this代表window,
闭包:内层作用域可以访问外层作用域的变量。
作用域:定义一个函数就开辟了一个局部作用域,整个JS执行环境有一个全局作用域。

11、事件委托是什么

利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!(提高性能,解决动态添加的子节点可以正确触发事件)

12、闭包是什么,有什么特性,对页面有什么影响

什么是闭包
  “官方”的解释:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函 数),因而这些变量也是该表达式的一部分。 在 Scala、Scheme、Common Lisp、Smalltalk、Groovy、 JavaScript、Ruby、 Python、Go、Lua、objective c、swift 以及Java(Java8及以上)等语言中都能找到对闭包不同 程度的支持。 通俗的讲就是函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包。

function a(){
       var i=0;
       function b(){
          alert(++i);
       }
          return b;
   }
    var c = a();
    c();
    // 这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)

闭包的特性:
  ①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口;
  ②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然存在;
对页面的影响:
  使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等。

13、如何阻止事件冒泡和默认事件

阻止事件冒泡:
e. stopPropagation();//标准浏览器
e.canceBubble=true;//ie9 之前
阻止默认事件:
e.returnValue=false; //ie9 之前
e.preventDefault();//标准浏览器

14、添加 删除 替换 插入到某个接点的方法

obj.appendChild() //添加
obj.insertBefore() //插入
obj.replaceChild()//替换
obj.removeChild()//删除

15、javascript 的本地对象,内置对象和宿主对象

本地对象为 array obj regexp 等可以 new 实例化
内置对象为 gload Math 等不可以实例化的
宿主为浏览器自带的 document,window 等

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值