JavaScript面试习题谁能分享分享?

5个经典的JavaScript面试题 极客标签 | 在线编程知识分享学习平台
发布于,阅读4999次,收藏 5次,评论条 - 来自
5个经典的JavaScript面试题
在IT界中公司对开发者的要求还是比较高的,但是如果开发者的技能和经验都达到了一定的级别,那他们还是很容易跳到优秀的公司的,当然薪水就更不是问题了。但是在面试之前,面试准备也应该足够的充分,毕竟不是每个优秀的开发者都能在短时间内表现自己。在这篇文章中,我将会列出5个常见的前端开发面试题。看到这里你证明你一定是个程序员或是HR了,不防把文章看完,了解一下自己还有什么不足之处,有什么问题希望大家可以在留言中交流。
问题1: 作用域
看一下下面的代码:
(function() {
var a = b = 5;
console.log(b);
结果会输出什么?&
这个问题考查的要点是两个不同的作用域,'a'被var声明成了一个局部变量,但是'b'实际上没有被定义,所以它是一个全局变量。
这个问题还牵扯到另个一个比较重要的问题,就是strict mode,如果你选择了strict mode,上面的代码就会报Uncaught ReferenceError,因为b没有被定义,它可以帮你检查出代码的一些问题:
(function() {
'use strict';
var a = window.b = 5;
console.log(b);
问题2: 创建&native&方法
写一个重复打印字符串对象的方法,输入一个整数,这个整数代表重复打印的字数,比如:
console.log('hello'.repeatify(3));
这样会打印出hellohellohello。
其中一种实现方法是这样:&
String.prototype.repeatify = String.prototype.repeatify || function(times) {
var str = '';
for (var i = 0; i & i++) {
这个问题考查的是开发者对JavaScript继承和prototype属性的了解程度。
Question 3: Hoisting
下面这段代码的输出结果是什么?
function test() {
console.log(a);
console.log(foo());
var a = 1;
function foo() {
undefined和2。
上面的代码和下面这段是等效的:
function test() {
function foo() {
console.log(a);
console.log(foo());
问题4: 在中如何执行
通过下面的代码给出结果,解释一下你的答案:
var fullname = 'John Doe';
var obj = {
fullname: 'Colin Ihrig',
fullname: 'Aurelio De Rosa',
getFullname: function() {
return this.
console.log(obj.prop.getFullname());
var test = obj.prop.getF
console.log(test());
&Aurelio De Rosa 和John Doe。
问题5:&call()&和 apply()
解决前面的问题之后让最后一个console.log()输出Aurelio De Rosa.
这个问题在于call()还是apply()。 如果你不知道它们之间的区别,我建设你先读一读&&下面这行代码我使用了call(),但是这个情况下apply()也会产生同样的结果:
console.log(test.call(obj.prop));
&极客标签 - 专业和精准的分享,关注你感兴趣的极客,社区提供超棒的精品教程,互动授课
了解前端技术,请访问极客和
英文原文地址:/5-typical-javascript-interview-exercises/
一个没有过去和未来的程序员,极客标签的技术编辑。Android极客汇Q群:。个人网站:
极客主页:
新浪微博:
已上传的图片列表:
尚未上传任何图片...
在线调试地址范例
例如:/gb/debug/bc4a78a6--b7cb-649ce1bda104.htm
以后再转发,立刻下载!javascript经典面试题_达内PHP培训
400-111-8989
javascript经典面试题
php面试频道整理了javascript的10个面试题。快来测试一下你是否已经全部掌握JavaScript核心技能,在面试中你一定可以用得到。
1介绍js的基本数据类型
Undefined、Null、Boolean、Number、String
2s有哪些内置对象?
数据封装类对象:Object、Array、Boolean、Number 和 String
其他对象:Function、Arguments、Math、Date、RegExp、Error
3this对象的理解
this总是指向函数的直接调用者(而非间接调用者);
如果有new关键字,this指向new出来的那个对象;
在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象W
4eval是做什么的?
它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval(‘(‘+ str +’)’);
5怎样添加、移除、移动、复制、创建和查找节点
// 创建新节点
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
// 添加、移除、替换、插入
appendChild()
removeChild()
replaceChild()
insertBefore() //在已有的子节点前插入一个新的子节点
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
getElementById() //通过元素Id,唯一性
6null和undefined的区别?
null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。
undefined:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
7new操作符具体干了什么呢?
(1)创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
(2)属性和方法被加入到 this 引用的对象中。
(3)新创建的对象由 this 所引用,并且最后隐式的返回 this 。
8JSON 的了解?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单,
易于读写, 占用带宽小。
格式:采用键值对,例如:{‘age’:’12’, ‘name’:’back’}
9call() 和 apply() 的区别和作用?
apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组。如果上下文是null,则使用全局对象代替。
如:function.apply(this,[1,2,3]);
call()的第一个参数是上下文,后续是实例传入的参数序列。
如:function.call(this,1,2,3);
10如何获取UA?
function whatBrowser() {
document.Browser.Name.value=navigator.appN
document.Browser.Version.value=navigator.appV
document.Browser.Code.value=navigator.appCodeN
document.Browser.Agent.value=navigator.userA
达内php面试频道整理了javascript的10个面试题。快来测试一下你是否已经全部掌握JavaScript核心技能,在面试中你一定可以用得到。
达内php面试频道为大家分享:php经典面试题及答案
达内php工程师面试频道为大家分享常见的PHP面试题
面试不简单,你要进入角色、要对公司做一番研究、要好好推销你自己,让公司觉得在所有求职者中,你才是最佳人选。可当你做了完全准备来面试,却碰到奇奇怪怪,让你目瞪口呆的问题,你该说什么,跟面试官谈软糖
Copyright (C)
All Rights Reserved
选择城市和中心
达内北京亦庄大学生实训基地
达内北京网络营销中心
达内北京会计中心5个典型的JavaScript面试题 - WEB前端 - 伯乐在线
& 5个典型的JavaScript面试题
IT 行业对JavaScript开发者有着很大的需求。如果你具备这种角色所需的知识结构,那么你就有很多的机会来影响你的公司,提高你的工资。但是在你被一家公司雇佣之前,你需要展示自己的技能以便通过它们的面试。在这篇文章中,我将列出5个典型的常用于测试候选人的JavaScript技能的问题。
问题1:作用域
考虑如下代码:
JavaScript
(function() {
var a = b = 5;
console.log(b);
(function() {&var a = b = 5;&})();&console.log(b);
请问控制台上会输出什么?
这一题的陷阱是,在函数表达式中有两个赋值,但a是用关键字var 来声明的,这意味着a是局部变量,而b则被赋予为全局变量。
另一个陷阱是,它并没有使用严格模式(use strict)。在函数里面,如果启用了严格模式,代码就会报错:“Uncaught ReferenceError: b is not defined”。请记住,严格模式需要你显式地引用全局作用域,代码应该写成:
JavaScript
(function() {
'use strict';
var a = window.b = 5;
console.log(b);
(function() {&'use strict';&var a = window.b = 5;&})();&console.log(b);
问题2:创建“内置”方法
给String对象定义一个repeatify方法。该方法接收一个整数参数,作为字符串重复的次数,最后返回重复指定次数的字符串。例如:
JavaScript
console.log('hello'.repeatify(3));
console.log('hello'.repeatify(3));
输出应该是
JavaScript
hellohellohello.
hellohellohello.
一个可行的做法如下:
JavaScript
String.prototype.repeatify = String.prototype.repeatify || function(times) {
var str = '';
for (var i = 0; i & i++) {
12345678910111213
String.prototype.repeatify = String.prototype.repeatify || function(times) {&var str = '';&for (var i = 0; i & times; i++) {&str += this;&}&return str;&};
这题测试开发者对Javascript的继承及原型属性的知识,它同时也检验了开发者是否能扩展内置数据类型的方法。
这里的另一个关键点是,看你怎样避免重写可能已经定义了的方法。这可以通过在定义自己的方法之前,检测方法是否已经存在。
JavaScript
String.prototype.repeatify = String.prototype.repeatify || function(times) {/* code here */};
String.prototype.repeatify = String.prototype.repeatify || function(times) {/* code here */};
当你被问起去扩展一个Javascript方法时,这个技术非常有用。
问题3 :声明提前
下面这段代码的结果是什么?为什么?
JavaScript
function test() {
console.log(a);
console.log(foo());
var a = 1;
function foo() {
123456789101112131415
function test() {&console.log(a);&console.log(foo());&var a = 1;&function foo() {&return 2;&}}&test();
代码的运行结果:undefined和 2
理由是,变量和函数的声明都被提前至函数体的顶部,而同时变量并没有被赋值。因此,当打印变量a时,它虽存在于函数体(因为a已经被声明),但仍然是undefined。换句话说,上面的代码等同于下面的代码:
JavaScript
function test() {
function foo() {
console.log(a);
console.log(foo());
12345678910111213141516171819
function test() {&var a;&function foo() {&return 2;&}&console.log(a);&console.log(foo());&a = 1;&}&test();
问题4:JavaScript中的this
下面代码的运行结果是什么并做解释。
JavaScript
var fullname = 'John Doe';
var obj = {
fullname: 'Colin Ihrig',
fullname: 'Aurelio De Rosa',
getFullname: function() {
return this.
console.log(obj.prop.getFullname());
var test = obj.prop.getF
console.log(test());
123456789101112131415161718192021
var fullname = 'John Doe';&var obj = {&fullname: 'Colin Ihrig',&prop: {&fullname: 'Aurelio De Rosa',&getFullname: function() {&return this.fullname;&}}};&console.log(obj.prop.getFullname());&var test = obj.prop.getFullname;&console.log(test());
代码输出:Aurelio De Rosa 和 John Doe
理由是,Javascript中关键字this所指代的函数上下文,取决于函数是怎样被调用的,而不是怎样被定义的。
在第一个console.log(),getFullname()被作为obj.prop对象被调用。因此,当前的上下文指代后者,函数返回这个对象的fullname属性。相反,当getFullname()被赋予test变量,当前的上下文指代全局对象window,这是因为test被隐式地作为全局对象的属性。基于这一点,函数返回window的fullname,在本例中即为代码的第一行。
问题5:call()和apply()
修复前一个问题,让最后一个console.log() 打印输出Aurelio De Rosa.
这个问题可以通过运用call()或者apply()方法强制转换上下文环境。如果你不了解这两个方法及它们的区别,我建议你看看这篇文章 . 下面的代码中我用了call(),但apply()也能产生同样的结果:
JavaScript
console.log(test.call(obj.prop));
console.log(test.call(obj.prop));
本文我们讨论了5个在对Javascript开发者面试中常问起的典型问题。实际中的问题会因面试的不同而不同,但是所涉及的概念和主题通常很类似。我希望你在检测自己的知识中获得乐趣。如果你不知道其中一些问题的答案,不要担心:没有什么是学习和试错不能够弥补的。如果你曾在面试中被问过其他的一些有趣的问题,不要犹豫,跟我们分享吧,它会帮助很多的开发者。
第二篇:《》
关于作者:
可能感兴趣的话题
关于伯乐前端
伯乐前端分享Web前端开发,包括JavaScript,CSS和HTML5开发技术,前端相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信