说到面试,其实大多数程序员应该都有过类似的经历,但是地方不一样面试经理还是不一样的,先说一下,我是在郑州(河南)工作一年半(不加实习一年)来到上海的,也就是说我是从小地方来到上海的,不得不承认确实是上海这个魔都对人的技能要求是很强的,但是上海公司无论大小都考察的是你的基本功,我昨天下午面试的是中国平安集团下面的事业部,做开发的,面试的是前端工程师。其实他们的要求倒是真的不严,我去的时候问到的所有的问题都是js的只是,所有的问题我确实都知道,而且都能说出来,但是面试官一细说,我确实有点驾驭不住,因为在这一年的过程中我写代码都是野路子出来的一样,遇到这种正规军,一说专业术语,脑子就蒙了!废话不多说,我现在就面试而言,说一下个人总结,也有一些自己准备的面试技巧
1.JS中使用typeof能得到什么数据类型
我先说一下答案:undifind string number boolean object function
这个问题主要考察的就是对数据类型的理解,然后还可以延伸出来的问题还有,数据类型可以分为什么,答案是值类型(undifind string number)和引用类型(object function array),为什么array不能通过typeof得到呢,这个问题我们下面再细说,因为对数组的判断还有一个特殊的方法。
2.==和===的区别
这个考的是变量计算的知识,这个问题的答案很简单,==有强制类型转换的功能,哪怕“000”和000是一样的,因为字符串可以强制转换成数值类型,但是===就不行,因为这个必须是全等于,数值和类型必须全部都等于!
这个问题还可以衍生出来的问题还有请你说出可以强制类型转换的几种方法(至少三种)第一种:字符串拼接 可以 第二种:==运算符 第三种:if判断 比如var a=10;if(a){
} 这个就把a转换成了boolean 返回的是true或者false 不管a是多少。 第四种:逻辑运算符 && || ! (或与非)
3.如何理解json
json其实就是一个js内置的对象而已,是一种数据格式。
可以衍生出来的问题就是你能想到的内置对象还有什么 答案有很多,可以说出一两个:Math Data window。。。。。
json对应的两个API:Json.stringify({a:10,b:20}),将对象转换成字符串
Json.parse(‘{“a”:10}’),将字符串转换成对象
4.如何准确判断一个随机参数是不是数组类型
这个就是i我们刚才谈到的,数组类型不能用typeof来判断,需要用instanceof Array来判断,返回值是boolean类型,
5.原型链继承
这个考点有两个,第一个是构造函数。第二就是原型链的概念,我先说一下构造函数,下面是一个例子:
function Foo(name,age) {
this.name=name;
this.age=age;
this.class="class-1"
return this
}
var f=new Foo('zhangsan',20);
var f1=new Foo('lisi',30);
上面这个就是用到了构造函数的知识,在上面这个方法里面,f的构造函数就是Foo,还有:var a={}就等于 var a=new Object();var b[]=new Array[];这两句话就是说,a的构造函数是Object,b的构造函数就是Array(说白了就是谁造出来的你,谁就是你的构造函数) 上面提到的instanceof就是判断一个函数是否是一个变量的构造函数。
下面我说一下原型链以及原型链的规则,原型链的规则有五条 (1).所有的引用类型(函数。数组。对象)都具有对象的特征,都具有可获展性。就是说都可以为其添加属性,可以添加无限多属性。(2).所有的引用类型都具有一个_proto_属性,而他的属性值就是一个普通对象而已,_proto_就叫做隐式原型 (3).所有的函数都有一个prototype属性,属性值也是一个普通对象,这个属性叫做显式原型 (4).所有的引用类型,_proto_属性值都指向该函数的构造函数的prototype属性值,而且是全等于 (obj._proto_===object.prototype 返回值是true)(5). 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去他的_proto_(也就是他的构造函数的prototype)中去寻找----------》下面例子
function Foo(name,age) {
this.name=name;
this.age=age;
this.class="class-1"
return this
}
Foo.prototype.className=function () {
alert(this.name)
}
var f=new Foo('zhangsan',20);
f.printName=function () {
console.log(this.name)
}
测试上面代码:f.printName() 得到zhangsan f.printName()得到zhangsan
6.写一个原型链继承的例子
function Animal() {
this.eat=function () {
console.log("i am eat")
}
}
function Dog() {
this.hask=function () {
console.log('dog hask')
}
}
Dog.prototype=new Animal();
var hashiqi=new Dog();
下面是一个具体dom查询的例子
function Elem(id) {
this.elem=document.getElementById(id)
}
Elem.prototype.html=function (val) {
var elem=this.elem;
if (val){
elem.innerHTML=val;
return this//链式操作
}else {
return elem.innerHTML
}
}