JS 中的基本概念
对于初学者来说,Javascript 可能看起来很简单,因为它有类似 C 语言的语法...
然而,它的运行方式、语言(ESNext)及其框架的不断变化可能会让初学者不知所措。
我在这里是为了澄清大家对这门我认为优美的语言,但最重要的是,它是一种利润丰厚的语言的困惑。
利润丰厚,因为 JS 可以轻松完成您今天想要它做的几乎任何事情。
- 想要构建 Web 应用程序吗?没问题。
- 想要构建一个 CLI 工具吗?没问题。
- 想开发桌面应用吗?哼,说起来容易做起来难!
每天可用的软件包和库的数量不断增加,这表明 JS 在构建软件应用程序时是多么抽象。
然而,JS 似乎饱受诟病,主要是因为它与竞争对手相比显得格格不入。对于那些可能忽略 JS 理论的人来说,这很令人困惑。
很多人在深入学习 JavaScript 语言之前,往往会忽略它的理论知识。这些概念可以帮助我们理解构建 JavaScript 应用程序时所采用的不同路径和模式。这些模式存在于 JS 领域的所有框架中,因此在学习 JavaScript 语言本身之前,了解这些概念非常有意义。
JS 的特性
(1)多范式
JavaScript 支持过程式、面向对象和事件驱动的函数式编程!
掌握 JS 的面向对象编程风格将会非常有益。
面向对象编程帮助程序员更轻松地将软件应用程序的组件可视化。
此外,学习 Typescript(带有类型的 JavaScript)还能让程序员轻松实现业内最佳的设计模式。这些设计模式能够以最高效的方式解决软件编程中最常见的问题。
这种多功能性使得 Javascript 非常平易近人,而且功能强大。
(2)解释
Javascript 与 C/C++ 不同,它不是一次性读取整个程序,而是逐行解释执行。这意味着 JS 会比 C/C++ 等编译型语言慢。
警告: JavaScript 因其运行时极其被动而臭名昭著。错误排查极其困难。
不过,不要灰心。随着时间的推移和不断练习,你会学会如何轻松应对。最常见的错误是变量返回NULL
值。当这类问题逐渐出现时,请前往 Stack Overflow,因为我向你保证,无论错误多么小众,你都不是第一个遇到错误的人。不过,console.log()
在项目开发过程中,灵活使用总是一个好主意。这有助于你在程序生命周期中准确地找出变量可能失效的时机。
(3)单线程
JavaScript 一次只能执行一个任务。它会根据任务类型将不同的任务放入不同的队列中。
抽象地说,JavaScript 基本上会将同步任务和异步任务分组,并分别放入队列中。
同步任务是遇到后立即处理的语句,即立即运行。这些任务包括日志语句、变量声明、条件检查等。
异步任务涉及可能需要可变时间才能返回输出的任务。异步任务的一个例子可能是从 Web API 请求信息。
此外,Javascript 还有一个作业队列,用于处理称为 Promises 的 JS 功能。
右键单击此网页并点击“检查”选项卡,即可实际体验 JavaScript 的单线程特性。接下来,在刚刚打开的窗口中,转到“控制台”选项卡。输入以下代码并按回车键。
while(true) {}
现在您可以观察到该页面已完全无响应。这是因为该页面上的 JavaScript 现在正忙于运行我们上面执行的无限 while 循环。
(4)非阻塞
之前我们讨论过异步任务,由于 JS 是单线程运行的,所以默认它不会等待任何人!
仅当所有同步代码块都执行完毕后,才会执行异步代码块,而不管该代码在程序中的位置如何。
console.log("I'm the first statement")
setTimeout(()=> {
console.log("I'm the second statement")
},1000)
console.log("I'm the third statement")
这里console.log()
将其中的语句打印到控制台。上面描述的
函数setTimeout()
在一秒后运行第二条语句。
检查输出
I'm the first statement
I'm the third statement
I'm the second statement
我们可以看到,第三条语句比第二条语句先打印出来。这是因为 JS 处理 Sync 和 Async 代码块的固有方法。
(5)高层
JavaScript 是一种高级语言。高级语言可以简单地理解为它们更接近人类使用的语言。高级语言能够提供更多功能,帮助程序员更好地表达他们想要构建的内容。
JavaScript 的这种高级特性使其能够更好地服务于 Web 的客户端部分。JS 过去的主要限制在于它只能在客户端运行,无法像大多数服务器端语言那样进行文件操作。
然而,这种情况已经发生了改变NodeJS
,开发人员可以使用 JavaScript 构建后端服务器。因此,只需一种语言,软件开发人员就可以同时在服务器端和客户端进行操作。这使得全栈工程师变得尤为突出。
(6)动态类型
JavaScript 是一种动态类型语言。这意味着,与 C 语言不同,在 C 语言中,我们需要为变量指定数据类型,而type-inference
在 JavaScript 中,我们可以自动感知变量所持有的数据类型。
// In C variables must have datatypes. In order to change datatypes from one type to //another , we need to use type-casting
int a = 5;
char b = "a";
float c = 7.036;
在 Javascript 中,我们分别使用let
和来声明变量或常量。const
let a = 5
console.log(a) // 5
a = 'Hello World'
console.log(a) // Hello World
const b = 'JS is awesome'
console.log(b) // JS is awesome
b = 'I changed my mind'
console.log(b) // Error: const cannot be changed
虽然类型推断由于其易于使用而看起来像是一个优点,但对于需要类型安全作为特性的大型项目来说,它立即变成了一个缺点。
因此,较大的项目使用 TypeScript,它只是 Javascript 的包装器,提供类型、接口和各种其他功能。
学习策略
在 JS Land 中安顿下来需要一段时间,但我有一个简单的清单,可用于Minimum Requirements
学习 Express 或 ReactJS 等框架。
首先,不要急于学习这些框架。慢慢掌握Vanilla Javascript。
基础知识
- 变量和常量
- 条件块(if-else)
- 循环(for、while、forEach)
- 开关盒
- 功能
这些是您的基本编程基础。
高级部分(最低要求)
- 异步/等待
- 承诺
- JavaScript 中的类
- Rest/Spread 语法
- 数组/对象迭代器
- 数组解构
- 模块(导入、导出)
在构建项目时继续学习,很快你就会对这门语言有相当深入的掌握。
文章来源:https://dev.to/aritik/essential-concepts-in-js-4bbj