JavaScript面试题总结系列(二)

2. JavaScript对象

2.1 内置对象

  • Object是JavaScript中全部对象的父对象;
  • 数据封装类对象:Object、Array、Boolean、Number、String;
  • 其余对象:Function、Arguments、Math、Date、RegExp、Error、JSON、全局对象;

2.2 定义对象的方式

  • 对象字面量: var obj = {};
  • 构造函数: var obj = new Object();
  • Object.create(); var obj = Object.create(Object.prototype);

2.3 经过new的方式和经过字面量的方式建立对象区别

  • 经过字面量的方式建立对象,不会调用Object()构造函数,简介而且性能更好;
  • 经过new操做符建立对象时,须要调用Object()构造函数,本质上是方法调用,涉及到在__proto__链中遍历该方法,当找到方法后,会产生调用方法必须的堆栈信息,方法结束后,须要释放堆栈,在性能上不如使用字面量的方式建立对象。

2.4 如何判断两个对象相等

能够转换为字符串来判断。举例:javascript

obj = {
    a: 1,
    b: 2
}
obj2 = {
    a: 1,
    b: 2
}
obj3 = {
    a: 1,
    b: '2'
}

JSON.stringify(obj) == JSON.stringify(obj2);//true
JSON.stringify(obj) == JSON.stringify(obj3);//false

2.5 new操做符

在调用 new 操做符的过程当中,执行了如下四个步骤:
  1. 新生成一个对象;
  2. 连接到原型:
let obj = new Object();
let Con = [].shift.call(arguments);
obj.__proto__ = Con.prototype

3.绑定 this: apply;
4.返回新对象;java

用一句话来讲就是:数组

new 操做符新建了一个空对象,这个对象原型指向构造函数的prototype,执行构造函数后返回这个对象。

2.6 浅拷贝和深拷贝

  • 什么是浅拷贝,什么是深拷贝?

浅拷贝和深拷贝,这里一般是指将一个对象A赋值给另外一个变量B。当A修改的时候,若是B也跟着变化,这个就是浅拷贝,若是B没有变化,这个叫作深拷贝。app

  • 浅拷贝能够如何实现

能够经过直接将对象赋值给变量的方式实现浅拷贝。举例:函数

let a = [1, 2, 3];
let b = a;
a[0] = 4;
b[0] // 4
  • 深拷贝能够如何实现
    1.Object.assign(); 看个例子:
let a = {
    age: 1
}
let b = Object.assign({}, a)
a.age = 2
console.log(b.age) // 1

2.展开运算符。举例:性能

let a = {
    age: 1
}
let b = {...a}
a.age = 2
console.log(b.age) // 1

3.JSON方法:this

主要是经过JSON.parse()和JSON.stringify()的搭配来实现深拷贝。举例:
let a = {
  age: 1,
  jobs: {
    first: 'FE'
  }
}
let b = JSON.parse(JSON.stringify(a))
a.jobs.first = 'native'
console.log(b.jobs.first) // FE

4.jQuery的extend()方法
因为如今项目中用jQuery相对较少,用到的时候能够单独去查该API。
5.递归
这个主要是针对对象的元素不是一维元素,元素自己可能也为对象或者数组,甚至子元素的子元素也是对象或者数组的时候,从根本上去实现深拷贝。prototype

相关文章
相关标签/搜索