Web前端开发——BAT面试题汇总及答案03(持续更新中)

目录:

  • 一、前言
  • 二、JS 基础篇
        • 5、JavaScript this 指针、闭包、作用域
        • 6、事件委托是什么
        • 7、闭包是什么,有什么特性,对页面有什么影响
        • 8、如何阻止事件冒泡和默认事件
        • 9、添加 删除 替换 插入到某个接点的方法
        • 10、javascript 的本地对象,内置对象和宿主对象
        • 11、document load 和 document ready 的区别
        • 12、、”== ”和“===”的不同
        • 13、已知 ID 的 Input 输入框,希望获取这个输入框的输入值,怎么做?(不使用第三方框架)
        • 14、希望获取到页面中所有的 checkbox 怎么做?(不使用第三方框架)
        • 15、设置一个已知 ID 的 DIV 的 html 内容为 xxxx,字体颜色设置为黑色(不使用第三方框架)
        • 16、当一个 DOM 节点被点击时候,我们希望能够执行一个函数,应该怎么做?
        • 17、看下列代码输出为何?解释原因。
        • 18、看下列代码,输出什么?解释原因。
        • 19、输出今天的日期,以 YYYY-MM-DD 的方式,比如今天是 2014 年 9 月 26 日,则输出 2014-09-26
        • 20、看下列代码,将会输出什么?(变量声明提升)
        • 21、把两个数组合并,并删除第二个元素。
        • 22、怎样添加、移除、移动、复制、创建和查找节点(原生 JS,实在基础,没细写每一步)
        • 23、正则表达式构造函数 var reg=new RegExp(“xxx”)与正则表达字面量 varreg=//有什么不同?匹配邮箱的正则表达式?
        • 24、以下两个变量 a 和 b,a+b 的哪个结果是 NaN? 答案( C )
        • 25、var a=10; b=20; c=4; ++b+c+a++ 以下哪个结果是正确的?答案( B )

一、前言

  1. 做这个的初心是希望巩固自己的基础知识,当然也希望能够帮助更多的开发者!
  2. 有些题目有多种答案,本文只给出了其中的一种,哪里有问题的话欢迎指出~
  3. 这个栏目将持续更新,前端的小伙伴欢迎关注噢~

二、JS 基础篇

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

this:指向调用上下文
闭包:内层作用域可以访问外层作用域的变量
作用域:定义一个函数就开辟了一个局部作用域,整个 js 执行环境有一个全局作用域

6、事件委托是什么

符合 W3C 标准的事件绑定 addEventLisntener /attachEvent
让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!

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

闭包就是能够读取其他函数内部变量的函数。
闭包的缺点:滥用闭包函数会造成内存泄露,因为闭包中引用到的包裹函数中定义的变量都
永远不会被释放,所以我们应该在必要的时候,及时释放这个闭包函数

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

e. stopPropagation();//标准浏览器
event.canceBubble=true;//ie9 之前
阻止默认事件:
为了不让 a 点击之后跳转,我们就要给他的点击事件进行阻止
return false
e.preventDefault();

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

obj.appendChild()
obj.insertBefore() //原生的 js 中不提供 insertAfter();
obj.replaceChild()//替换
obj.removeChild()//删除

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

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

11、document load 和 document ready 的区别

Document.onload 是在结构和样式加载完才执行 js
window.onload:不仅仅要在结构和样式加载完,还要执行完所有的样式、图片这些资源文
件,全部加载完才会触发 window.onload 事件
Document.ready 原生中没有这个方法,jquery 中有 $().ready(function)

12、、”== ”和“===”的不同

前者会自动转换类型
后者不会
1==”1”
null==undefined
===先判断左右两边的数据类型,如果数据类型不一致,直接返回 false
之后才会进行两边值的判断

13、已知 ID 的 Input 输入框,希望获取这个输入框的输入值,怎么做?(不使用第三方框架)

document.getElementById(“ID”).value

14、希望获取到页面中所有的 checkbox 怎么做?(不使用第三方框架)

var domList = document.getElementsByTagName(‘input’)
var checkBoxList = [ ]; //返回的所有的 checkbox
var len = domList.length; //缓存到局部变量
while (len–) { //使用 while 的效率会比 for 循环更高
if (domList[len].type == ‘checkbox’) {
checkBoxList.push(domList[len]);
}
}

15、设置一个已知 ID 的 DIV 的 html 内容为 xxxx,字体颜色设置为黑色(不使用第三方框架)

var dom = document.getElementById(“ID”);
dom.innerHTML = “xxxx”
dom.style.color = “#000”

16、当一个 DOM 节点被点击时候,我们希望能够执行一个函数,应该怎么做?

直接在 DOM 里绑定事件:


在 JS 里通过 onclick 绑定:xxx.onclick = test
通过事件添加进行绑定:addEventListener(xxx, ‘click’, test)
那么问题来了,Javascript 的事件流模型都有什么?
“事件冒泡”:事件开始由最具体的元素接受,然后逐级向上传播
“事件捕捉”:事件由最不具体的节点先接收,然后逐级向下,一直到最具体的
“DOM 事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡

17、看下列代码输出为何?解释原因。

var a;
alert(typeof a); // “undefined”
//alert(b); // 报错
b=10;
alert(typeof b);//”number”

解释:Undefined 是一个只有一个值的数据类型,这个值就是“undefined”,在使用 var
声明变量但并未对其赋值进行初始化时,这个变量的值就是 undefined。注意未申明的变量和声明了未赋值的是不一样的。
undefined 会在以下三种情况下产生:
1、 一个变量定义了却没有被赋值
2、 想要获取一个对象上不存在的属性或者方法:
3、 一个数组中没有被赋值的元素
注意区分 undefined 跟 not defnied(语法错误)是不一样的

18、看下列代码,输出什么?解释原因。

var a = null;
alert(typeof a); //object
解释:null 是一个只有一个值的数据类型,这个值就是 null。表示一个空指针对象,所以
用 typeof 检测会返回”object”。

19、输出今天的日期,以 YYYY-MM-DD 的方式,比如今天是 2014 年 9 月 26 日,则输出 2014-09-26

var d = new Date();
// 获取年,getFullYear()返回 4 位的数字
var year = d.getFullYear();
// 获取月,月份比较特殊,0 是 1 月,11 是 12 月
var month = d.getMonth() + 1;
// 变成两位
month = month < 10 ? '0' + month : month;
// 获取日
var day = d.getDate();
day = day < 10 ? '0' + day : day;
alert(year + '-' + month + '-' + day);

20、看下列代码,将会输出什么?(变量声明提升)

var foo = 1;
function(){
console.log(foo);
var foo = 2;
console.log(foo);
}
答案:输出 undefined 和 2。上面代码相当于:
var foo = 1;
function(){
var foo;
console.log(foo); //undefined
foo = 2;
console.log(foo); // 2;
}
函数声明与变量声明会被 JavaScript 引擎隐式地提升到当前作用域的顶部,但是只提升名
称不会提升赋值部分。

21、把两个数组合并,并删除第二个元素。

var array1 = ['a','b','c'];
var bArray = ['d','e','f'];
var cArray = array1.concat(bArray);
cArray.splice(1,1);

22、怎样添加、移除、移动、复制、创建和查找节点(原生 JS,实在基础,没细写每一步)

1)创建新节点
createDocumentFragment() //创建一个 DOM 片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
2)添加、移除、替换、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入
3)查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的 Name 属性的值
getElementById() //通过元素 Id,唯一性

23、正则表达式构造函数 var reg=new RegExp(“xxx”)与正则表达字面量 varreg=//有什么不同?匹配邮箱的正则表达式?

答案:当使用 RegExp()构造函数的时候,不仅需要转义引号(即\”表示”),并且还需要
双反斜杠(即\表示一个\)。使用正则表达字面量的效率更高。
邮箱的正则匹配:
var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;

24、以下两个变量 a 和 b,a+b 的哪个结果是 NaN? 答案( C )

A、var a=undefind; b=NaN //拼写
B、var a=‘123’; b=NaN//字符串
C、var a =undefined , b =NaN
D、var a=NaN , b=‘undefined’//”Nan”

25、var a=10; b=20; c=4; ++b+c+a++ 以下哪个结果是正确的?答案( B )

A、34 B、35 C、36 D、37

//var a=10; b=20; c=4;   ++b+c+a++//21+4+10=3

前端面试题系列将会持续更新,欢迎关注该博客~

相关文章推荐:
Web前端开发——BAT面试题汇总及答案01(持续更新中)
Web前端开发——BAT面试题汇总及答案02(持续更新中)

你可能感兴趣的:(前端面试宝典)