2017深圳web前端开发面试笔试题

来源:互联网 发布:看电视用什么软件 编辑:程序博客网 时间:2024/06/18 14:40

题目&答案

  • 介绍一下 JS 的基本数据类型。
    UndefinedNull、Boolean、NumberString
  • 介绍一下 JS 有哪些内置对象。
    Object 是 JavaScript 中所有对象的父对象数据封装类对象:ObjectArrayBooleanNumberString

    其他对象:Function、Argument、MathDateRegExpError


    • 介绍一下 JavaScript 原型,原型链,它们有何特点?
      每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。关系:instance.constructor.prototype = instance.__proto__//特点:JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本,当我们修改原型时,与之相关的对象也会继承这一改变。//当我们需要一个属性时,JavaScript引擎会先看当前对象中是否有这个属性,如果没有的话,就会查找它的prototype对象是否有这个属性,如此递推下去,一致检索到Object内建对象。function Func(){}Func.prototype.name = "Xiaosong";Func.prototype.getInfo = function() {  return this.name;}var person = new Func();console.log(person.getInfo());//"Xiaosong"console.log(Func.prototype);//Func { name = "Xiaosong", getInfo = function() }
    • JavaScript 有几种类型的值?能否画一下它们的内存图?
      栈:原始数据类型(UndefinedNull,Boolean,NumberString)堆:引用数据类型(对象、数组、函数)两种类型的区别:存储位置不同//原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
    • JavaScript 如何实现继承?
      (1)构造继承(2)原型继承(3)实例继承(4)拷贝继承//原型prototype机制或apply和call方法去实现较简单,建议使用构造函数与原型混合方式。function Parent() {  this.name = 'song';}function Child() {  this.age = 28;}Child.prototype = new Parent(); //通过原型,继承了Parent//var demo = new Child()l;alert(demo.age);alert(demo.name); //得到被继承的属性
    • JavaScript 有哪几种创建对象的方式?
      javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON;但写法有很多种,也能混合使用。//(1)对象字面量的方式person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};(2)用function来模拟无参的构造函数function Person(){}var person = new Person(); //定义一个function,如果使用new"实例化",该function可以看作是一个Classperson.name = "Xiaosong";person.age = "23";person.work = function() {  alert("Hello " + person.name);}person.work();(3)用function来模拟参构造函数来实现(用this关键字定义构造的上下文属性)function Person(name,age,hobby) {  this.name = name; //this作用域:当前对象  this.age = age;  this.work = work;  this.info = function() {      alert("我叫" + this.name + ",今年" + this.age + "岁,是个" + this.work);  }}var Xiaosong = new Person("WooKong",23,"程序猿"); //实例化、创建对象Xiaosong.info(); //调用info()方法(4)用工厂方式来创建(内置对象)var jsCreater = new Object();jsCreater.name = "Brendan Eich"; //JavaScript的发明者jsCreater.work = "JavaScript";jsCreater.info = function() {  alert("我是"+this.work+"的发明者"+this.name);}jsCreater.info();(5)用原型方式来创建function Standard(){}Standard.prototype.name = "ECMAScript";Standard.prototype.event = function() {  alert(this.name+"是脚本语言标准规范");}var jiaoben = new Standard();jiaoben.event();(6)用混合方式来创建function iPhone(name,event) {  this.name = name;  this.event = event;}iPhone.prototype.sell = function() {  alert("我是"+this.name+",我是iPhone5s的"+this.event+"~ haha!");}var SE = new iPhone("iPhone SE","官方翻新机");SE.sell();
    • eval 是做什么的?
      它的功能是把对应的字符串解析成JS代码并运行;应该避免使用eval,因为不安全,非常耗性能(2次,一次解析成js语句,一次执行)。

原创粉丝点击