iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >常见的JavaScript知识点有哪些
  • 115
分享到

常见的JavaScript知识点有哪些

2024-04-02 19:04:59 115人浏览 八月长安
摘要

这篇文章主要讲解了“常见的javascript知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常见的JavaScript知识点有哪些”吧!1.声明

这篇文章主要讲解了“常见的javascript知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常见的JavaScript知识点有哪些”吧!

1.声明

查看以下代码,并回答输出的内容(以及原因)。

// situation 1 
console.log(person); 
var person = 'John'; 
 
// situation 2 
console.log(person); 
let person = 'Phill'; 
 
// situation 3 
console.log(person); 
const person = 'Frank'; 
 
// situation 4 
const person = 'Vanessa'; 
console.log(person); 
person = 'Mike'; 
console.log(person); 
 
// situation 5 
var person = 'John'; 
let person = 'Mike'; 
console.log(person); 
 
// situation 6 
var person = 'John'; 
if (person) { 
  let person = 'Mike'; 
  console.log(person); 
} 
console.log(person);

说明
Situation 1: 预期结果是在控制台中看到文本 John,但是令人惊讶的是,我们看到记录了undefined。想知道为什么吗?
好吧,这是经典的 JavaScript 在起作用。这种行为被称为提升。在后台,该语言将变量声明和值分配分为两部分。不管变量最初由开发人员在哪里声明,变量都将移动到顶部,声明时将其值设置为 undefined。看起来像这样:

var person; 
console.log(person); 
person = 'John';

Situation 2: 在这里,结果将是引用错误。

Uncaught ReferenceError: Cannot access 'person' before initialization

错误文本说明了一切。因为我们使用了关键字 let,所以我们的变量被提升,但没有初始化,并且抛出该错误,通知我们正在尝试访问未初始化的变量。在 es6 中引入了关键字 let,使我们能够使用块作用域中的变量,从而帮助我们防止意外行为。
在这里,我们会得到与 Situation 2 中相同的错误。
不同之处在于我们使用了关键字 const,从而防止在初始化后重新分配变量。 ES6 中也引入了此关键字。
Situation 4: 在这种情况下,我们可以看到关键字 const 是如何工作的,以及它如何避免无意中重新分配变量。在我们的示例中,首先会在控制台中看到 Vanessa,然后是一个类型错误。

Uncaught TypeError: Assignment to constant variable

const 变量的使用随着我们的代码库呈指数增长。
Situation 5: 如果已经在某个作用域内使用关键字 var 定义了变量,则在同一作用域中用关键字 let 再次声明该变量将会引发错误。
因此,在我们的示例中,将不会输出任何内容,并且会看到语法错误提示。

Uncaught SyntaxError: Identifier 'person' has already been declared

Situation 6: 我们分别有一个函数作用域的变量,和块作用域的变量。在这种情况下,它们是否有相同的名字或标识符并不重要。
在控制台中,我们应该看到 Mike 和 John 被依次输出。为什么?
因为关键字 let 为我们提供了块作用域内的变量,这意味着它们仅存在于自己创建的作用域内,在这种情况下,位于if...else 语句中。内部变量优先于外部变量,这就是为什么我们可以使用相同标识符的原因。

2.继承

考虑以下类,并尝试回答输出了什么以及为什么。

class Person { 
  constructor() { 
    this.sayHello = () => { 
      return 'Hello'; 
    } 
  } 
 
  sayBye() { 
    return 'Bye'; 
  } 
} 
 
class Student extends Person { 
  sayHello() { 
    return 'Hello from Student'; 
  } 
} 
 
const student = new Student(); 
console.log(student.sayHello());

说明
如果你的答案是 Hello,那是对的!
为什么:每次我们创建一个新的 Student 实例时,都会将 sayHello 属性设置为是一个函数,并返回字符串 Hello。这是在父类(Person)类的构造函数中发生的。
在 JavaScript 中,类是语法糖,在我们的例子中,在原型链上定义了 Student 类中的 sayHello 方法。考虑到每次我们创建 Student 类的实例时,都会将 sayHello 属性设置为该实例,使其成为返回字符串 Hello 的 function,因此我们永远不会使用原型链上定义的函数,也就永远不会看到消息 Hello from Student 。

3.对象可变性

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

// situation 1 
const user = { 
  name: 'John', 
  surname: 'Doe' 
} 
 
user = { 
  name: 'Mike' 
} 
 
console.log(user); 
 
// situation 2 
const user = { 
  name: 'John', 
  surname: 'Doe' 
} 
 
user.name = 'Mike'; 
console.log(user.name); 
 
// situation 3 
const user = { 
  name: 'John', 
  surname: 'Doe' 
} 
 
const anotherUser = user; 
anotherUser.name = 'Mike'; 
console.log(user.name); 
 
// situation 4 
const user = { 
  name: 'John', 
  surname: 'Doe', 
  address: { 
    street: 'My Street' 
  } 
} 
 
Object.freeze(user); 
 
user.name = 'Mike'; 
user.address.street = 'My Different Street'; 
console.log(user.name); 
console.log(user.address.street);

说明
Situation 1: 正如我们在上一节中所了解的,我们试图重新分配不允许使用的 const 变量,所以将会得到类型错误。
控制台中的结果将显示以下文本:

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.箭头函数

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

const student = { 
  school: 'My School', 
  fullName: 'John Doe', 
  printName: () => { 
    console.log(this.fullName); 
  }, 
  printSchool: function () { 
    console.log(this.school); 
  } 
}; 
 
student.printName(); 
student.printSchool();

说明
控制台中的输出将依次为 undefined 和 My School。
你可能会熟悉以下语法:

var me = this; 
// or 
var self = this; 
 
// ... 
// ... 
// somewhere deep... 
// me.doSomething();

你可以把 me 或 self 变量视为父作用域,该作用域可用于在其中创建的每个嵌套函数。
当使用箭头函数时,这会自动完成,我们不再需要存储 this 引用来访问代码中更深的地方。箭头函数不绑定自己,而是从父作用域继承一个箭头函数,这就是为什么在调用 printName 函数后输出了 undefined 的原因。

5.解构

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

const rawUser = { 
   name: 'John', 
   surname: 'Doe', 
   email: 'john@doe.com', 
   displayName: 'SuperCoolJohn', 
   joined: '2016-05-05', 
   image: 'path-to-the-image', 
   followers: 45 
} 
 
let user = {}, userDetails = {}; 
({ name: user.name, surname: user.surname, ...userDetails } = rawUser); 
 
console.log(user); 
console.log(userDetails);

说明
尽管有点开箱即用,但是上面的语法是允许的,并且不会引发错误! 很整洁吧?
上面的语法功能强大,使我们能够轻松地将任何对象分成两个更具体的对象,上面的示例在控制台的输出为:

// {name: "John", surname: "Doe"} 
// {email: "john@doe.com", displayName: "SuperCoolJohn", joined: "2016-05-05", image: "path-to-the-image", followers: 45}

6.异步/等待

调用以下函数后将输出什么?

(async () => { 
  let result = 'Some Data'; 
 
  let promise = new Promise((resolve, reject) => { 
    setTimeout(() => resolve('Some data retrieved from the server'), 2000); 
  }); 
 
  result = await promise; 
  console.log(result); 
})();

说明
如果你认为是两秒钟后输出 Some data retrieved from the server ,那么你是对的!
代码将会暂停,直到 promise 得到解决。两秒钟后,它将继续执行并输出给定的文本。这意味着 JavaScript 引擎实际上会等到异步操作完成。可以说 async/await 是用来获得 promise 结果的语法糖。也有人认为它是比 promise.then 更具可读性的方式。

7. Return 语句

const multiplyByTwo = (x) => { 
    return 
    { 
        result: x * 2 
    }; 
} 
console.log(multiplyByTwo(2));

说明
如果你的答案是 {result: 4},那你就错了。输出是 undefined。但是不要对自己太苛刻,考虑到我也写 C# 代码,这也曾经困扰着我,这在 C# 那儿不是个问题。
由于自动分号插入的原因,上面的代码将返回 undefined。 return 关键字和表达式之间不允许使用行结束符
解决方案是用以下列方式之一去修复这个函数:

const multiplyByTwo = (x) => { 
    return { 
        result: x * 2 
    }; 
} 
要么
const multiplyByTwo = (x) => { 
  return ( 
    { 
      result: x * 2 
    } 
  ); 
}

感谢各位的阅读,以上就是“常见的JavaScript知识点有哪些”的内容了,经过本文的学习后,相信大家对常见的JavaScript知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 常见的JavaScript知识点有哪些

本文链接: https://www.lsjlt.com/news/85295.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 常见的JavaScript知识点有哪些
    这篇文章主要讲解了“常见的JavaScript知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常见的JavaScript知识点有哪些”吧!1.声明...
    99+
    2024-04-02
  • 常用的JavaScript知识点有哪些
    这篇文章主要介绍“常用的JavaScript知识点有哪些”,在日常操作中,相信很多人在常用的JavaScript知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”常用的JavaScript知识点有哪些...
    99+
    2023-07-05
  • Java中锁的常见知识点有哪些
    本篇文章给大家分享的是有关Java中锁的常见知识点有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。锁的概念可重入锁如果锁具备可重入性,则称作为可重入锁。像synchroni...
    99+
    2023-06-05
  • 常见的JavaScript易错知识点指的是哪些
    常见的JavaScript易错知识点指的是哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言我学习Jav...
    99+
    2024-04-02
  • Shell常见知识有哪些
    小编给大家分享一下Shell常见知识有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Shell常见知识一、用户登陆进入系统后的系统环境变量$HOME 使用者自...
    99+
    2023-06-09
  • javascript小知识点有哪些
    本篇内容主要讲解“javascript小知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript小知识点有哪些”吧!设置图片时<image scr="&qu...
    99+
    2023-06-04
  • JavaScript BOM知识点有哪些
    本篇内容主要讲解“JavaScript BOM知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript BOM知识点有哪些”吧!1、BOM 简介   所谓的 BOM 即浏览...
    99+
    2023-06-04
  • Python 面试中常问的 JavaScript 知识点有哪些?
    在前端领域,JavaScript 是一种非常重要的编程语言。很多 Python 开发者也需要掌握 JavaScript 相关的知识,以便在面试中获得更好的机会。下面,我们就来了解一下 Python 面试中常问的 JavaScript 知识...
    99+
    2023-06-18
    面试 javascript laravel
  • python正则表达式常见的知识点有哪些
    本篇内容主要讲解“python正则表达式常见的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python正则表达式常见的知识点有哪些”吧!一、介绍正则表达式是一个特殊的字符序列,计算...
    99+
    2023-06-30
  • JavaScript的底层知识点有哪些
    这篇文章将为大家详细讲解有关JavaScript的底层知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JavaScript是一门直译式的解释型脚本语言,它具有动...
    99+
    2024-04-02
  • JavaScript面试的知识点有哪些
    这篇“JavaScript面试的知识点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2024-04-02
  • JavaScript事件的知识点有哪些
    今天小编给大家分享一下JavaScript事件的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2024-04-02
  • JavaScript常见标识符有哪些
    这篇文章给大家分享的是有关JavaScript常见标识符有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript常见标识符有哪些JavaScript有什么特点1、...
    99+
    2024-04-02
  • JavaScript基础知识点有哪些
    这篇文章主要介绍“JavaScript基础知识点有哪些”,在日常操作中,相信很多人在JavaScript基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java...
    99+
    2024-04-02
  • JavaScript学习知识点有哪些
    这篇文章主要为大家展示了“JavaScript学习知识点有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript学习知识点有哪些”这篇文章吧。一...
    99+
    2024-04-02
  • JavaScript之DOM的知识点有哪些
    这篇文章主要介绍“JavaScript之DOM的知识点有哪些”,在日常操作中,相信很多人在JavaScript之DOM的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • CSS常用的知识点有哪些
    这篇文章主要讲解了“CSS常用的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS常用的知识点有哪些”吧!一、width(宽)& he...
    99+
    2024-04-02
  • vue常用知识点有哪些
    这篇文章主要介绍“vue常用知识点有哪些”,在日常操作中,相信很多人在vue常用知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue常用知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-02
  • JavaScript模块知识点有哪些
    这篇文章主要介绍“JavaScript模块知识点有哪些”,在日常操作中,相信很多人在JavaScript模块知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java...
    99+
    2024-04-02
  • JavaScript面试知识点有哪些
    这篇文章主要介绍了JavaScript面试知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript面试知识点有哪些文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作