独自闯荡上海,面试总结1

说到面试,其实大多数程序员应该都有过类似的经历,但是地方不一样面试经理还是不一样的,先说一下,我是在郑州(河南)工作一年半(不加实习一年)来到上海的,也就是说我是从小地方来到上海的,不得不承认确实是上海这个魔都对人的技能要求是很强的,但是上海公司无论大小都考察的是你的基本功,我昨天下午面试的是中国平安集团下面的事业部,做开发的,面试的是前端工程师。其实他们的要求倒是真的不严,我去的时候问到的所有的问题都是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
      }
    }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值