加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Javascript面试的完美指南(开发者视角)

发布时间:2019-02-22 02:08:20 所属栏目:建站 来源:前端小智
导读:为了说明 JS 面试的复杂性,首先,请尝试给出以下结果: onsole.log(2.0==2==newBoolean(true)==1) 十有八九的会给出false, 其实运行结果是true,原因请看 这里。 1) 理解 JS 函数 函数是 JavaScript 的精华,是 JS 一等公民。JS 函数不仅仅是一个普通的

思考一下,以下输出的是什么:

  1. function Foo(){  
  2. console.log(this); // 打印 {}?  
  3. }  

因为这是一个全局对象,记住,无论父作用域是什么,它都将由子作用域继承。打印出来是 window 对象。上面讨论的三个方法实际上用于设置这个对象。

现在,this 的最后一个类型,在对象中的 this, 如下:

  1. var person = { 
  2.     name: "Stranger", 
  3.     age: 24, 
  4.     get identity() { 
  5.         return {who: this.name, howOld: this.age}; 
  6.     } 
  7. }  

上述使用了 getter 语法,这是一个可以作为变量调用的函数。

  1. person.identity; // returns {who: "Stranger", howOld: 24} 

此时,this 实际上是指对象本身。正如我们前面提到的,它在不同的地方有不同的表现。

5) 理解对象 (Object.freeze, Object.seal)

通常对象的格式如下:

  1. var marks = {physics: 98, maths:95, chemistry: 91}; 

它是一个存储键、值对的映射。 javascript 对象有一个特殊的属性,可以将任何东西存储为一个值。这意味着我们可以将一个列表、另一个对象、一个函数等存储为一个值。

可以用如下方式来创建对象:

  1. var marks = {};  
  2. var marks = new Object();  

可以使用 JSON.stringify() 将一个对象转制成字符串,也可以用 JSON.parse 在将其转成对象。

  1. // returns "{"physics":98,"maths":95,"chemistry":91}"  
  2. JSON.stringify(marks);  
  3. // Get object from string  
  4. JSON.parse('{"physics":98,"maths":95,"chemistry":91}');  

使用 Object.keys 迭代对象:

  1. var highScere = 0;  
  2. for (i of Object.keys(marks)) { 
  3.   if (marks[i] > highScore) 
  4.     highScore = marks[i]; 
  5. }  

Object.values 以数组的方式返回对象的值。

对象上的其他重要函数有:

  • Object.prototype(object)
  • Object.freeze(function)
  • Object.seal(function)

Object.prototype 上提供了许多应用上相关的函数,如下:

Object.prototype.hasOwnProperty 用于检查给定的属性/键是否存在于对象中。

  1. marks.hasOwnProperty("physics"); // returns true  
  2. marks.hasOwnProperty("greek"); // returns false  

Object.prototype.instanceof 判断给定对象是否是特定原型的类型。

  1. function Car(make, model, year) { 
  2.   this.make = make; 
  3.   this.model = model; 
  4.   this.year = year; 
  5. var newCar = new Car('Honda', 'City', 2007); 
  6. console.log(newCar instanceof Car); // returns true  

使用 Object.freeze 可以冻结对象,以便不能修改对象现有属性。

  1. var marks = {physics: 98, maths:95, chemistry: 91};  
  2. finalizedMarks = Object.freeze(marks);  
  3. finalizedMarks["physics"] = 86; // throws error in strict mode  
  4. console.log(marks); // {physics: 98, maths: 95, chemistry: 91}  

在这里,试图修改冻结后的 physics 的值,但 JavaScript不允许这样做。我们可以使用 Object.isFrozen 来判断,给定对象是否被冻结:

  1. Object.isFrozen(finalizedMarks); // returns true 

Object.seal 与 Object.freeze 略有不同。 Object.seal() 方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要可写就可以改变。

  1. var marks = {physics: 98, maths:95, chemistry: 91};  
  2. Object.seal(marks);  
  3. delete marks.chemistry; // returns false as operation failed  
  4. marks.physics = 95; // Works!  
  5. marks.greek = 86; // Will not add a new property  

同样, 可以使用 Object.isSealed 判断对象是否被密封。

  1. Object.isSealed(marks); // returns true 

在全局对象函数上还有许多其他重要的函数/方法,在这里找到他们。

6) 理解原型继承

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读