作为一名JS开发人员,是什么使我夜不能寐!

如何在 Microsoft Edge 上使用开发人员工具 在本文中,我们将仔细研究如何在 Microsoft Edge 上使用开发人员工具。 阅读详情

 

JavaScript 是一种奇怪的语言。虽然受到 Smalltalk 的启发,但它用了类似 C 的语法。它结合了程序、函数和面向对象编程(OOP)的方方面面。它有许多能够解决几乎任何编程问题的方法,这些方法通常是多余的,并没有强烈推荐哪些是首选。它是弱动态类型,但采用了类似强制类型的方法,使经验丰富的开发人员也可以使用。

JavaScript 也有其瑕疵、陷阱和可疑的功能。新手程序员需要努力解决一些更为困难的概念 —— 异步性、封闭性和提升。具有其他语言经验的程序员合理地假设具有相似名称的东西,但是看上去与 JavaScript 相同的工作方法往往是错误的。数组不是真正的数组,什么是 this ,什么是原型, new 实际上做了些什么?

ES6 类的麻烦

到目前为止,最糟糕的罪魁祸首是 JavaScript 的最新版本——ECMAScript 6(ES6)的 类 。一些关于类的讨论坦率地令人震惊,并揭示了对语言实际运作机制的根深蒂固的误解:

“JavaScript 现在终于成为一种 真正的 面向对象的语言,因为它有类!”

要么是:

“让我们从 JavaScript 中被破坏的继承模型中解脱出来。”

甚至是:

“在 JavaScript 中创建类型是一种更安全、更简单的方法。”

这些言论并没有影响到我,因为它们暗示了原型继承中存在问题,让我们抛开这些论点。这些话让我感到困扰,因为它们都不是真的,它们证明了 JavaScript 的“everything for everyone”的语言设计方法的后果:它削弱了程序员对语言的理解。在我进一步说明之前,先举一个例子。

JavaScript 小测验 #1:这些代码块之间的本质区别是什么?

 1function PrototypicalGreeting(greeting = "Hello", name = "World") {
 2  this.greeting = greeting
 3  this.name = name
 4}
 5
 6PrototypicalGreeting.prototype.greet = function() {
 7  return `${this.greeting}, ${this.name}!`
 8}
 9
10const greetProto = new PrototypicalGreeting("Hey", "folks")
11console.log(greetProto.greet())
12class ClassicalGreeting {
13  constructor(greeting = "Hello", name = "World") {
14    this.greeting = greeting
15    this.name = name
16  }
17
18  greet() {
19    return `${this.greeting}, ${this.name}!`
20  }
21}
22
23const classyGreeting = new ClassicalGreeting("Hey", "folks")
24
25console.log(classyGreeting.greet())

这里的答案是 并不是唯一的 。这些代码确实有效,它只是一个是否使用了 ES6 类语法的问题。

没错,第二个例子更具表现力,因此你可能会认为 class 是语言的一个很好的补充。不幸的是,这个问题会变得更加微妙。

JavaScript 小测验 #2:以下代码有什么作用?

 1function Proto() {
 2  this.name = 'Proto'
 3  return this;
 4}
 5
 6Proto.prototype.getName = function() {
 7  return this.name
 8}
 9
10class MyClass extends Proto {
11  constructor() {
12    super()
13    this.name = 'MyClass'
14  }
15}
16
17const instance = new MyClass()
18
19console.log(instance.getName())
20
21Proto.prototype.getName = function() { return 'Overridden in Proto' }
22
23console.log(instance.getName())
24
25MyClass.prototype.getName = function() { return 'Overridden in MyClass' }
26
27console.log(instance.getName())
28
29instance.getName = function() { return 'Overridden in instance' }
30
31
32console.log(instance.getName())

正确的答案是它打印到控制台的输出:

1> MyClass
2> Overridden in Proto
3> Overridden in MyClass
4> Overridden in instance

如果你回答错误,就意味着不明白 class 究竟是什么。但这不是你的错。就像 Array 、 class 不是语言特征一样,它是 蒙昧的语法 。它试图隐藏原型继承模型和随之而来的笨拙的惯用语法,这意味着 JavaScript 正在做的事情并非是你想的那样。

你可能已经被告知在 JavaScript 中引入了 class ,以使来自 Java 等语言的经典 OOP 开发人员更加熟悉 ES6 类继承模型。如果你是这样的开发者,那个例子可能会让你感到恐惧。例子表明 JavaScript 的 class 关键字没有提供类所需要的任何保证。它还演示了原型继承模型中的一个主要差异:原型是 对象实例 ,而不是 类型 。

原型与类

基于类和基于原型的继承之间最重要的区别是类定义了一个 类型 ,它可以在运行时实例化,而原型本身就是一个对象实例。

ES6 类的子类是另一个 类型 定义,它使用新的属性和方法扩展父类,然后可以在运行时实例化它们。原型的子代是另一个对象 实例 ,它将任何未在子代上实现的属性委托给父代。

旁注:你可能想知道为什么我提到了类方法,但没有提到原型方法。那是因为 JavaScript 没有方法的概念。函数在 JavaScript 中是一流的,它们可以具有属性或是其他对象的属性。

类构造函数用来创建类的实例。JavaScript 中的构造函数只是一个返回对象的普通函数。JavaScript 构造函数唯一的特别之处在于,当使用 new 关键字调用时,它会将其原型指定为返回对象的原型。如果这对你来说听起来有点混乱,那么你并不孤单 —— 它就是原型很难理解的原因。

为了说明一点,原型的子代不是原型的 副本 ,也不是与原型相同的对象。子代对原型有生命参考,并且子代上不存在的原型属性是对原型上具有相同名称属性的单向引用。。

思考以下代码:

 1let parent = { foo: 'foo' }
 2let child = { }
 3Object.setPrototypeOf(child, parent)
 4
 5console.log(child.foo) // 'foo'
 6
 7child.foo = 'bar'
 8
 9console.log(child.foo) // 'bar'
10
11console.log(parent.foo) // 'foo'
12
13delete child.foo
14
15console.log(child.foo) // 'foo'
16
17parent.foo = 'baz'
18
19console.log(child.foo) // 'baz'

注意:你几乎不会在现实中写这样的代码 —— 这是一种可怕的做法 —— 但它简洁地证明了这一原则。

在前面的例子中,当 child.foo 是 undefined 时,它引用了 parent.foo 。一旦在 child 上定义了 foo , child.foo 的值为 'bar' ,但 parent.foo 保留了原始值。一旦我们 delete child.foo ,它将会再次引用 parent.foo ,这意味着当我们更改父项的值时, child.foo 指的是新值。

让我们来看看刚才发生了什么(为了更清楚地说明,我们假设这些是 Strings 而不是字符串字面量,这里的区别并不重要):

显示如何在JavaScript中处理缺少的引用的原型链

它的工作方式,特别是 new 和 this 的特点是另一个主题,但如果你想学到更多的内容,可以查阅 Mozilla 的关于 JavaScript 的原型继承链的一篇详尽的文章【 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain 】。

关键的一点是原型没有定义 type ,它们本身就是 instances ,并且它们在运行时是可变的。

还有勇气往下读吗?接下来让我们再回过头来剖析 JavaScript 类。

JavaScript 小测验 #3:如何在类中实现私有?

上面的原型和类属性并没有被“封装”为外部不可访问的私有成员。应该怎样解决这个问题呢?

这里没有代码示例。答案是,你做不到。

JavaScript 没有任何私有的概念,但是它有闭包:

 1function SecretiveProto() {
 2  const secret = "The Class is a lie!"
 3  this.spillTheBeans = function() {
 4    console.log(secret)
 5  }
 6}
 7
 8const blabbermouth = new SecretiveProto()
 9try {
10  console.log(blabbermouth.secret)
11}
12catch(e) {
13  // TypeError: SecretiveClass.secret is not defined
14}
15
16blabbermouth.spillTheBeans() // "The Class is a lie!"

你明白刚才发生了什么吗?如果不明白的话就没搞懂闭包。好吧,但是它们并不那么令人生畏,而且非常有用,你应该花一些时间来了解它们【 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures 】。

JavaScript 小测验 #4:怎样用 `class` 关键字写出与上面功能相同的代码?

对不起,这是另一个技巧问题。你可以做同样的事情,但它看起来是这样的:

 1class SecretiveClass {
 2  constructor() {
 3    const secret = "I am a lie!"
 4    this.spillTheBeans = function() {
 5      console.log(secret)
 6    }
 7  }
 8
 9  looseLips() {
10    console.log(secret)
11  }
12}
13
14const liar = new SecretiveClass()
15try {
16  console.log(liar.secret)
17}
18catch(e) {
19  console.log(e) // TypeError: SecretiveClass.secret is not defined
20}
21liar.spillTheBeans() // "I am a lie!"

如果你觉得这看起来比 SecretiveProto 更简单或更清晰,那么请告诉我。在我个人看来,它有点糟糕 —— 它打破了 JavaScript 中 class 声明的习惯用法,并且它不像你期望的那样来自 Java。这将通过以下方式表明:

JavaScript 小测验#5:`SecretiveClass::looseLips()` 是做什么用的?

我们来看看这段代码:

1try {
2  liar.looseLips()
3}
4catch(e) {
5  // ReferenceError: secret is not defined
6}

嗯……这很尴尬。

JavaScript Pop Quiz#6:经验丰富的 JavaScript 开发人员更喜欢原型还是类?

你猜对了,这又是一个关于技巧问题 —— 经验丰富的 JavaScript 开发人员倾向于尽可能避免两者。以下是使用 JavaScript 执行上述操作的惯用的好方法:

 1function secretFactory() {
 2  const secret = "Favor composition over inheritance, `new` is considered harmful, and the end is near!"
 3  const spillTheBeans = () => console.log(secret)
 4
 5  return {
 6    spillTheBeans
 7  }
 8}
 9
10const leaker = secretFactory()
11leaker.spillTheBeans()

这不仅仅是为了避免继承的丑陋或强制封装。想一想你能用 secretFactory 和 leaker 做些什么,你用原型或类做可不能轻易的做到。

首先,你可以解构它,因为你不必担心 this 的上下文:

1const { spillTheBeans } = secretFactory()
2
3spillTheBeans() // Favor composition over inheritance, (...)

这真是太好了。除了避免使用 new 和 this 做蠢事之外,它还允许我们将对象与 CommonJS 和 ES6 模块互换使用。它还使开发更容易:

 1function spyFactory(infiltrationTarget) {
 2  return {
 3    exfiltrate: infiltrationTarget.spillTheBeans
 4  }
 5}
 6
 7const blackHat = spyFactory(leaker)
 8
 9blackHat.exfiltrate() // Favor composition over inheritance, (...)
10
11console.log(blackHat.infiltrationTarget) // undefined (looks like we got away with it)

使用 blackHat 的程序员不必担心 exfiltrate 来自哪里, spyFactory 也不必乱用 Function::bind 的上下文小伎俩或深层嵌套属性。请注意,我们无需在简单的同步过程代码中担心 this ,但它会导致异步代码中的各种问题。

经过一番思考, spyFactory 可以发展成为一种高度复杂的间谍工具,可以处理各种渗透目标 - 换句话说,就是外观模式。

当然你也可以用类来做,或者更确切地说,是各种各样的类,所有类都继承自 abstract class 或 interface 等,不过 JavaScript 没有任何抽象或接口的概念。

让我们用一个更好的例子来看看如何用工厂模式实现它:

1function greeterFactory(greeting = "Hello", name = "World") {
2  return {
3    greet: () => `${greeting}, ${name}!`
4  }
5}
6
7console.log(greeterFactory("Hey", "folks").greet()) // Hey, folks!

这比原型或类的版本更简洁。它可以更有效地实现其属性的封装。此外,它在某些情况下具有较低的内存和性能影响(乍一看似乎不太可能,但 JIT 编译器正悄悄地在幕后做了减少重复和推断类型的工作)。

因此它更安全,通常情况下也更快,并且编写这样的代码更容易。为什么我们又需要类了呢?哦,当然是可重用性。如果我们想要一个unhappy 且 enthusiastic 的 greeting会怎样?好吧,如果我们用的是 ClassicalGreeting 类,可能会直接跳到梦想中的类层次结构中。我们知道自己需要参数化符号,所以会做一些重构并添加一些子类:

 1// Greeting class
 2class ClassicalGreeting {
 3  constructor(greeting = "Hello", name = "World", punctuation = "!") {
 4    this.greeting = greeting
 5    this.name = name
 6    this.punctuation = punctuation
 7  }
 8
 9  greet() {
10    return `${this.greeting}, ${this.name}${this.punctuation}`
11  }
12}
13
14// An unhappy greeting
15class UnhappyGreeting extends ClassicalGreeting {
16  constructor(greeting, name) {
17    super(greeting, name, " :(")
18  }
19}
20
21const classyUnhappyGreeting = new UnhappyGreeting("Hello", "everyone")
22
23console.log(classyUnhappyGreeting.greet()) // Hello, everyone :(
24
25// An enthusiastic greeting
26class EnthusiasticGreeting extends ClassicalGreeting {
27  constructor(greeting, name) {
28    super(greeting, name, "!!")
29  }
30
31  greet() {
32    return super.greet().toUpperCase()
33  }
34}
35
36const greetingWithEnthusiasm = new EnthusiasticGreeting()
37
38console.log(greetingWithEnthusiasm.greet()) // HELLO, WORLD!!

这是一个很好的方法,直到有人出现并要求实现一个不能完全适合层次结构的功能,整个事情都没有任何意义。当我们尝试用工厂模式编写相同的功能时,在这个想法中放一个引脚:

 1const greeterFactory = (greeting = "Hello", name = "World", punctuation = "!") => ({
 2  greet: () => `${greeting}, ${name}${punctuation}`
 3})
 4
 5// Makes a greeter unhappy
 6const unhappy = (greeter) => (greeting, name) => greeter(greeting, name, ":(")
 7
 8console.log(unhappy(greeterFactory)("Hello", "everyone").greet()) // Hello, everyone :(
 9
10// Makes a greeter enthusiastic
11const enthusiastic = (greeter) => (greeting, name) => ({
12  greet: () => greeter(greeting, name, "!!").greet().toUpperCase()
13})
14
15console.log(enthusiastic(greeterFactory)().greet()) // HELLO, WORLD!!

虽然它的代码更短,但得到的好处并不明显。实际上你可能会觉得它更难以阅读,也许这是一种迟钝的方法。难道我们不能只有一个 unhappyGreeterFactory 和一个 passionsticGreeterFactory ?

然后你的客户出现并说:“我需要一个不开心的新员工,希望整个办公室都能认识它!”

1console.log(enthusiastic(unhappy(greeterFactory))().greet()) // HELLO, WORLD :(

如果我们需要不止一次地使用这个 enthusiastically 且 unhappy 的  greeter,可以更容易实现:

1const aggressiveGreeterFactory = enthusiastic(unhappy(greeterFactory))
2
3console.log(aggressiveGreeterFactory("You're late", "Jim").greet())

这种合成风格的方法适用于原型或类。例如,你可以将 UnhappyGreeting 和 EnthusiasticGreeting 重新考虑为装饰器。它仍然需要比上面的函数风格方法更多的样板,但这是你为 真正的 类的安全性和封装所付出的代价。

问题是,在 JavaScript 中,你没有得到自动安全性。强调 class 用法的 JavaScript 框架会对这些问题变很多“魔术”,并强制类使用自己的行为。看看 Polymer 的 ElementMixin 源代码【 https://github.com/Polymer/polymer/blob/master/lib/mixins/element-mixin.js 】,我敢说。它简直是 JavaScript 神器级别的代码,我没有任何讽刺的意思。

当然,我们可以用 Object.freeze 或 Object.defineProperties 来解决上面讨论的一些问题,以达到更大或更小的效果。但是为什么要在没有函数的情况下模仿表单,而忽略了 JavaScript 本身为我们提供的工具?当你的工具箱旁边有真正的螺丝刀时,你会用一把标有 “螺丝刀” 的锤子来驱动螺丝吗?

如何在TRAE(国际版)中搭建ESP-IDF环境以及怎么使用ESP-IDF插件编译烧录到ESP32s3中 点击进入,再点击ESPRESSIF中的EXPRESS,这里会下载ESP-IDF所需要的全部工具和包等等。首先我们从终端中进入项目所在的目录中,我的项目在E盘下的jikecode\esp32s3-client中,我就进入这个目录下。,因为我的项目是针对ESP32-S3进行开发的,所以这里的芯片型号是esp32s3,大家根据各自芯片的型号来输入。执行了这个命令后,ESP-IDF会自动配置与ESP-S3相关的编译选项,生成对应芯片的配置文件。进入第一个ESP-IDF插件,进行安装,注意安装的是。 阅读详情

相关推荐

DSP在线升级方案:TMS320C6678使用网络或者串口输出升级数据进行固件升级

下面这段先引用创龙的说明 IBL 运行后, 将从 NOR FLASH 或 NAND FLASH 的 0x00080000 地址引导 ELF/BBLOB 格式 用户程序。 当引导 ELF 格式用户程序时, IBL 会解析用户程序头部信息,并根据头部信息 拷贝不同的代码段至指定 CPU 内存地址,然后将 PC 指针跳转至_c_int00, 再运行用户程 序。当引导 BBLOB 格式用户程序时,由于无头部信息, IBL 会将用户程序拷贝至 0x9E000000 (该内存地址为 IBL 代码指定),并将 PC..

ToneChip的专栏,一个传统的嵌入式码农,裸机编程 1943

Node.js 是什么?Node.js与JavaScript的区别是什么?

node.js是什么?Node.js是一个Javascript运行环境(runtime)。Node.js与JavaScript的区别是什么?本质:     Javascript是一种web前端语言,主要用于web开发中,由浏览器解析执行     Node.js是一个可以快速构建网络服务及应用的平台,是用Javascri...

吴甜甜的技术博客 3万+

YOLOv8n模型导出ONNX的避坑指南:解决版本差异,正确生成TensorRT/RKNN所需输出节点

本文详细介绍了YOLOv8n模型导出ONNX格式的实战避坑指南,涵盖版本差异处理、代码修改技巧及TensorRT/RKNN部署优化方案。针对不同推理框架需求,提供输出节点生成、动态轴处理和后处理划分等核心问题的解决方案,帮助开发者高效完成模型部署。

weixin_33247358的博客 357

给小仙女讲什么是javascript(一)

小仙女你好:我是今日开讲老师,请叫我张老师,蟹蟹! 今天我们一起来了解一下javaScript是个什么东东。 就跟朋友之间也需要了解一样。讲讲它的出生和成长! (图是我从网上偷的,爱你的心是真的)好了,不说废话了 历史:话说在上世纪1995年,(天呢,就是我出生那年)网景公司推出了 naviator浏览器,这个公司很有追求,不仅能实现静态的html,还想发展动态的效果,那个年代网页一等待就上分钟...

她在江湖飘 314

开源项目 ruoyi-sso-oauth2(一)环境配置

Ruoyi若依实现单点登录SSO、oauth2认证

Xiaoweidumpb 9684

PCL点云八叉树体素中心下采样,体素包含点索引提取

基于PCL octree实现点云八叉树计算,支持提取体素中心点进行点云下采样;根据任一点坐标,可以得到其在八叉树中的位置,输出对应体素内其余点的坐标或者索引

qq_48694523的博客 463

开发人员常犯的 JavaScript 错误

开发人员在使用 JavaScript (JS) 时,无论经验如何,常常遇到各种问题。这些问题通常源于其他编程语言的使用习惯,或对 JS 特性的误解。以下是一些常见的 JS 错误及其避免方法。即使是经验丰富的 JavaScript 开发人员也可能陷入这些常见的陷阱。通过了解和避免这些错误,开发人员可以编写更简洁、更高效、更可靠的代码。

m0_45522371的博客 1015

SPICE仿真软件:HSPICE_(20).HSPICE仿真结果的后处理

HSPICE仿真结果的后处理是一个多步骤的过程,包括读取结果文件、可视化、分析和导出。通过使用命令行工具、Python脚本和HSPICE内置工具,可以高效、准确地完成这些任务。Python脚本的灵活性和强大的数据分析能力使其成为后处理的理想选择。自动化处理可以显著提高工作效率,减少人为错误,而高级分析方法可以更深入地理解仿真结果,为电路设计提供有力支持。

kkchenjj的博客 1382

Java开发人员JavaScript

早在Java平台的早期,对于新闻记者,甚至是新手程序员,混淆JavaScript和Java语言并不罕见。 毕竟,由于这两种语言都适用于Web编程,因此得到了普及,并且几年来,它们在流行的想象中并驾齐驱。 如今,大多数人将这两种语言区分开来,但是Java开发人员仍然普遍认为JavaScript是一种玩具语言,甚至不适合脚本编写。 事实是,JavaScript(很像Java语言)已经存在,甚至还在...

cusi77914的博客 8270

基于EB工具的TC3xx_MCAL配置开发05_ADC模块硬件Pwm触发Demo配置

基于EB工具,硬件Pwm触发ADC采集Demo配置详细介绍

initiallizer的博客 3510

26版SPSS操作教程(高级教程第十章)

#大道之行,在于坚持 #本期内容:二分类Logistic回归模型 #由于导师最近布置了学习SPSS这款软件的任务,因此想来平台和大家一起交流下学习经验,这期推送内容接上一次高级教程第九章的学习笔记,希望能得到一些指正和帮助~

你好! 1599

请停止在JavaScript中使用类,你将成为一名更好的开发人员

英文 |https://medium.com/javascript-in-plain-english/please-stop-using-classes-in-javascript-a...

web前端开发 272

“华为杯”研究生数学建模竞赛2017年-【华为杯】B题:面向下一代光通信的 VCSEL 激光器仿真模型

得出以下主要结论:在相同的偏置电流条件下,随着温度的升高,带宽的峰值向。在相同的温度下,随着电流的增大,带宽的峰值越小且曲线由波峰形状。方案,包括可能的数学公式,不同温度和偏置电流下的带宽响应曲线,并与问题。线,得出以下主要结论:在相同的偏置电流条件下,随着温度的升高,带宽的峰。在相同的温度下,随着电流的增大,带宽的峰值越小且曲线由波峰形状逐渐变得。得的激光器特性曲线和模型中仿真得到的特性曲线,之后,可以将两组曲线的差。说明的是,由于数值优化算法的成功与否很大程度上依赖于初始参数的猜测,参。

getusushu的博客 99

UFO² 接入 UFO³ Galaxy:将 Windows 桌面自动化代理接入多设备编排框架的完整实践指南

本文讲解如何将 **UFO²(Windows 桌面自动化代理)** 集成进 **UFO³ Galaxy 框架**,使其成为受 Galaxy 统一编排的托管子代理设备(device agent)。完成本文的实操后,你将掌握:以 server-client 分布式模式启动 UFO² Server 与 Client、通过 AIP(Agent Interaction Protocol)让 Galaxy 的

gitblog_00546的博客 684

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2020年,JavaScript开发人员必备的5项高薪技能

全文共1816字,预计学习时长5分钟 图源:unsplash 开发人员的一生可以用两句话概括:计算器,以及学习新技能。成为开发人员绝非易事,他们是解决问题的人,也是不断学习的人。科技世界每天都在快速变化,如果你不想在这条快速变化的道路上落后,就必须不断学习新技能。不断升级,绝不止步。 如果你正在找一份更高薪的工作,或是想在业余时间学习一项新技能,那么本文很适合你。笔者筛选了5项最受欢迎的技能,非常受雇主们的青睐,他们愿意为拥有以下技能的开发者支付高薪。如果是软件开发领域的萌新,那么...

读芯术的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

如何做一名了不起的开发人员?

“从自学成才到训练营,再到转学软件工程,中途退学,最后继续自学成才......通过反思自己走过的人生之路,才知道我做过的好的和坏的决定都有哪些......” 作者 |Patricio Ferraggi 译者 |风车云马,责编 | 郭芮 出品 | 优快云(ID:优快云news) 以下为译文: 或许对很多人来说,10月8日不过是又一个平凡的日子而已,但对我来说,这一天意义非凡,是...

优快云资讯 2812

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

面向 JavaScript 开发人员的 5 大物联网库

面向 JavaScript 开发人员的 5 大物联网库1. Cylon.js2. IoT.js3. Johnny-Five4. NodeRed5. Zetta总结 最近元宇宙的概念火遍互联网,自 Facebook 改名 Meta 以来,国内外越来越多的企业纷纷加入到布局元宇宙的行列。元宇宙之所以强势进入人们视野,与其底层技术的进步有着莫大的关系,包括 AR/VR、云计算、物联网、5G、人工智能、数字孪生等等。其中,5G 作为重要的连接基础,是元宇宙场景得以实现的关键。元宇宙将汇集游戏引擎、AR 可穿戴设备

Mr_沉溺的博客 4663

​JavaScript 开发人员的主要基本技能是?

程序员之所以欣赏JavaScript软件开发,是因为他们能够利用JavaScript构建客户喜欢的高度互动网站。 作者 |PaulAzorín 译者 |弯月,责编 | 刘静 出品 | 优快云(ID:优快云news) 以下为译文: 如今,JavaScript非常流行,它非常灵活,被GitHub评为世界上最常用的编程语言。JavaScript在Web开发中占据了主导地位,大约有9...

优快云资讯 2723

每个Node.js开发人员必须掌握的10个JavaScript概念

Rahul Mhatre是Software AG的开发团队负责人。 以JavaScript和V8引擎为核心,具有事件驱动的体系结构和开箱即用的可扩展性,Node.jsSwift成为创建Web应用程序和SaaS产品的事实上的标准。 诸如Express,Sails和Socket.IO之类的Node.js框架允许用户快速引导应用程序,并仅关注业务逻辑。 Node.js得益于JavaScri...

cxu0262的博客 228

初级开发人员的缺点_作为一名初级开发人员,我如何努力克服自己的挣扎

初级开发人员的缺点by Syeda Aimen Batool 通过Syeda Aimen Batool 作为一名初级开发人员,我如何努力克服自己的挣扎 (How I’m working to overcome my struggles as a junior developer) I believe the other name for coding is the “struggle”. An...

441

十步让你成为一名优秀的Web开发人员

十步让你成为一名优秀的Web开发人员如果你已经是一名优秀的Web开发人员,那请路过即可。如果你还是一个准备入行或刚入行的菜鸟,那本文倒值得一读。要成为一名优秀的Web开发人员,没有捷径可走,本文就是为那些还在苦苦寻找学习目标的人编写的。 第一步:学好HTML HTML(超文本标记语言)是网页    如果你已经是一名优秀的Web开发人员,那请路过即可。如果你还是一个准备入行或刚入行的

wengman的专栏 623

全栈开发和web开发_如何在2020年成为一名全栈Web开发人员

全栈开发和web开发 很多人都想成为Web开发人员。 他们中的一些人对计算机充满热情,他们想尝试编程,其中一些人希望找到一份高薪工作。 为何要学习Web开发并不重要,但重要的是您如何学习它。 如果您自己学习所有内容,则可能会遇到困难,因为您不知道正确的方法。 这就是为什么我创建本文的原因。 Web是世界上使用最广泛的平台之一,因此对Web开发技能有很高的要求,如果您决定学习它们,您将有很多机...

编程故事的地方 195

JavaScript 25 岁了!

点赞再看,微信搜索**【大迁世界】**关注这个没有大厂背景,但有着一股向上积极心态人。本文 GitHub https://github.com/qq449245884/xiaozhi 上已经收录,文章的已分类,也整理了很多我的文档,和教程资料。 本文已过原作者授权翻译。 JavaScript于25年前(1995年12月4日)首次向公众推出。JavaScript 最初开发仅用了10天时间,便迅速成为最受欢迎的编程语言之一,如今全球有数百万的开发人员每天都在使用它。 2020年是它的25周年纪念日——...

粉丝们务必加入微信粉丝群 1万+

如何成为一名优秀物联网开发人员

物联网(IoT)行业正蓬勃发展。根据最近的Gartner报告,在2017年,全球使用的互联设备数量将达到84亿,超过全球人口总量。 Gartner预测,到2020年,将会有超过208亿件物联网设备。 随着家庭互联、汽车互联和办公室互联变得越来越主流化,需要更多的开发人员来确保互联设备正常、安全地运行。 IBM物联网开发人员生态系统主管Greg Gorma...

weixin_33974433的博客 327
上一篇: Python3 模拟登录并爬取表格数据!
下一篇: 这个库厉害了,自动补全Python代码,节省50%敲码时间!
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值