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

7 个常见的 JavaScript 测验及解答

发布时间:2019-11-01 21:41:18 所属栏目:建站 来源:疯狂的技术宅
导读:我相信学习新事物并评估我们所知的东西对自己的进步非常有用,可以避免了我们觉得自己的知识过时的情况。在本文中,我将介绍一些常见的 JavaScript 知识。请享用! 1.声明 查看以下代码,并回答输出的内容(以及原因)。 //situation1 console.log(person); v

在 JavaScript 中,类是语法糖,在我们的例子中,在原型链上定义了 Student 类中的 sayHello 方法。考虑到每次我们创建 Student 类的实例时,都会将 sayHello 属性设置为该实例,使其成为返回字符串 Hello 的 function,因此我们永远不会使用原型链上定义的函数,也就永远不会看到消息 Hello from Student 。

3.对象可变性

思考以下情况中每个部分的输出:

  1. // situation 1 
  2. const user = { 
  3.   name: 'John', 
  4.   surname: 'Doe' 
  5.  
  6. user = { 
  7.   name: 'Mike' 
  8.  
  9. console.log(user); 
  10.  
  11. // situation 2 
  12. const user = { 
  13.   name: 'John', 
  14.   surname: 'Doe' 
  15.  
  16. user.name = 'Mike'; 
  17. console.log(user.name); 
  18.  
  19. // situation 3 
  20. const user = { 
  21.   name: 'John', 
  22.   surname: 'Doe' 
  23.  
  24. const anotherUser = user; 
  25. anotherUser.name = 'Mike'; 
  26. console.log(user.name); 
  27.  
  28. // situation 4 
  29. const user = { 
  30.   name: 'John', 
  31.   surname: 'Doe', 
  32.   address: { 
  33.     street: 'My Street' 
  34.   } 
  35.  
  36. Object.freeze(user); 
  37.  
  38. user.name = 'Mike'; 
  39. user.address.street = 'My Different Street'; 
  40. console.log(user.name); 
  41. console.log(user.address.street); 

说明

Situation 1: 正如我们在上一节中所了解的,我们试图重新分配不允许使用的 const 变量,所以将会得到类型错误。

控制台中的结果将显示以下文本:

  1. Uncaught TypeError: Assignment to constant variable 

Situation 2: 在这种情况下,即使我们改用关键字 const 声明的变量,也会有不同的行为。不同之处在于我们正在修改对象属性而不是其引用,这在 const 对象变量中是允许的。

控制台中的结果应为单词 Mike。

Situation 3: 通过将 user 分配给 anotherUser 变量,可以在它们之间共享引用或存储位置(如果你愿意)。换句话说,它们两个都会指向内存中的同一个对象,因所以更改一个对象的属性将反映另一个对象的更改。

控制台中的结果应为 Mike。

Situation 4: 在这里,我们使用 Object.freeze 方法来提供先前场景(Situation 3)所缺乏的功能。通过这个方法,我们可以“冻结”对象,从而不允许修改它的属性值。但是有一个问题!它只会进行浅冻结,这意味着它不会保护深层属性的更新。这就是为什么我们能够对 street 属性进行更改,而 name 属性保持不变的原因。

控制台中的输出依次为 John 和 My Different Street 。

4.箭头函数

运行以下代码段后,将会输出什么以及原因:

  1. const student = { 
  2.   school: 'My School', 
  3.   fullName: 'John Doe', 
  4.   printName: () => { 
  5.     console.log(this.fullName); 
  6.   }, 
  7.   printSchool: function () { 
  8.     console.log(this.school); 
  9.   } 
  10. }; 
  11.  
  12. student.printName(); 
  13. student.printSchool(); 

说明

控制台中的输出将依次为 undefined 和 My School。

你可能会熟悉以下语法:

  1. var me = this; 
  2. // or 
  3. var self = this; 
  4.  
  5. // ... 
  6. // ... 
  7. // somewhere deep... 
  8. // me.doSomething(); 

你可以把 me 或 self 变量视为父作用域,该作用域可用于在其中创建的每个嵌套函数。

当使用箭头函数时,这会自动完成,我们不再需要存储 this 引用来访问代码中更深的地方。箭头函数不绑定自己,而是从父作用域继承一个箭头函数,这就是为什么在调用 printName 函数后输出了 undefined 的原因。

5.解构

请查看下面的销毁信息,并回答将要输出的内容。给定的语法是否允许,否则会引发错误?

  1. const rawUser = { 
  2.    name: 'John', 
  3.    surname: 'Doe', 
  4.    email: 'john@doe.com', 
  5.    displayName: 'SuperCoolJohn', 
  6.    joined: '2016-05-05', 
  7.    image: 'path-to-the-image', 
  8.    followers: 45 
  9.  
  10. let user = {}, userDetails = {}; 
  11. ({ name: user.name, surname: user.surname, ...userDetails } = rawUser); 
  12.  
  13. console.log(user); 
  14. console.log(userDetails);  

说明

尽管有点开箱即用,但是上面的语法是允许的,并且不会引发错误! 很整洁吧?

(编辑:核心网)

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

热点阅读