标签 Javascript 下的文章

JSON 的创造者认为 JavaScript 应该退休

在网络应用中随处可见到用于序列化数据的 JSON。近日,JSON 规范的创造者在一次采访中认为 JavaScript 已经成为进步的障碍,他说,“我们今天能对 JavaScript 做的最好的事情就是让它退休。”他是一位著名的 JavaScript 的倡导者。他说,“人们对进一步扩充语言而不是让它变得更好有着强烈的兴趣。所以,JavaScript 和其他恐龙语言一样,已经成为进步的障碍。”根据 Stack Overflow 今年早些时候的一项调查,超过 65% 的开发者使用 JavaScript,远远超过排名第二的 Python 的 48%。

消息来源:Dev Class
老王点评:编程语言的发展很有趣,像一个生命一样,一样新陈代谢,兴亡更替。那么你觉得 JavaScript 过时了吗?

爱普生打印机设置最大打印次数,到达即报废

据报道,爱普生公司将其某些型号的喷墨打印机硬编码设定为打印到特定次数后就停止工作。理由是到达该次数后,打印机内用于收集页面上未使用的墨水的一个墨垫会被墨水浸满,可能会溢出造成客户的损失。然而,爱普生并没有测量墨垫的饱和度来确定何时达到该点,而是在其打印机上设置了一个计数器,当达到某个阈值时就会禁用该打印机。并且,尽管该公司声称墨垫问题无法修复,但一段视频显示,事实上,墨垫的更换很简单。而该公司则建议用户在到达限制后,最好更换新的打印机。

消息来源:Sub Stack
老王点评:合着在买到打印机时就已经被限制了使用次数。

Meta 公司在网上发布了其最新的 AI 聊天机器人

该机器人被称为 BlenderBot 3,能够进行一般的闲聊。它建立在大型语言模型(LLM)上,OpenAI 的 GPT-3 就是 LLM 最广为人知的例子。但 LLM 模型也有严重的缺陷:它们会在训练数据中加强偏见,并经常对用户的问题编造答案。后面这个问题是 Meta 特别想用 BlenderBot 来测试的。该聊天机器人的一大特点是它能够在互联网上搜索,以便谈论特定的话题。更重要的是,用户可以点击它的回答,看看它从哪里得到的信息。

消息来源:The Verge
老王点评:“人”还是要经常聊天的,否则容易孤独和思想上走向偏执。: D

最主要的是要精通 JavaScript,这样你就可以减少 ReactJS 之旅的复杂性。

React 是一个建立在 HTML、CSS 和 JavaScript 之上的 UI 框架,其中 JavaScript(JS)负责大部分的逻辑。如果你对变量、数据类型、数组函数、回调、作用域、字符串方法、循环和其他 JS DOM 操作相关的主题有一定了解,这些将极大地加快学习 ReactJS 的步伐。

你对现代 JavaScript 的概念将决定你能多快地掌握 ReactJS 的步伐。你不需要成为一个 JavaScript 专家来开始你的 ReactJS 之旅,但就像对食材的了解是任何希望掌握烹饪的厨师所必须的一样,学习 ReactJS 也是如此。它是一个现代的 JavaScript UI 库,所以你需要了解一些 JavaScript。问题是,需要多少?

示例解释

假设我被要求用英语写一篇关于“牛”的文章,但我对这种语言一无所知。在这种情况下,为了让我成功地完成任务,我不仅要对主题有概念,还要对指定的语言有概念。

假设我获得了一些关于主题(牛)的知识,我如何计算我需要知道多少英语才能写出规定的主题?如果我必须用英语写一篇关于其他复杂话题的文章呢?

这很难搞清楚,不是吗?我不知道我要写关于这个话题的什么东西,但它可能是任何东西。所以要想开始,我必须要有适当的英语知识,但还不止于此。

极端现实

在开始使用 ReactJS 之前,所需的 JavaScript 数量也是如此。根据我的例子情景,ReactJS 是话题“牛”,而 JavaScript 是英语。要想在 ReactJS 中获得成功,对 JavaScript 的掌握很重要。如果没有适当的 JavaScript 基础,一个人是很难专业地掌握 ReactJS 的。无论我对这个主题有多少知识,如果我不知道语言的基础,我就不能正确地表达自己。

多少才算够?

根据我的经验,当你开始你的 ReactJS 之旅时,你应该已经熟悉了:

  • 变量
  • 数据类型
  • 字符串方法
  • 循环
  • 条件式

你应该对这些具体的 JavaScript 熟悉。但这些只是最基本的先决条件。当你试图创建一个简单的 React 应用时,你将不可避免地需要处理事件。所以,普通函数、函数表达式、语句、箭头函数的概念,箭头函数和普通函数的区别,以及这两类函数中 this 关键字的词义范围,这确实很重要。

但问题是,如果我必须使用 ReactJS 创建一个复杂的应用怎么办?

获得启发

在 JavaScript 中处理事件、传播操作符、解构、命名导入和默认导入将帮助你理解 React 代码的工作机制。

最重要的是,你必须了解 JavaScript 本身背后的核心概念。JavaScript 在设计上是异步的。当出现在文件底部的代码在文件顶部的代码之前执行时,不要惊讶。像 promise、callback、async-await、map、filter 和 reduce 这样的结构,是 ReactJS 中最常见的方法和概念,尤其是在开发复杂的应用时。

最主要的是要精通 JavaScript,这样你可以减少 ReactJS 之旅的复杂性。

越来越好

我很容易说出你需要知道的东西,但你去学习它完全是另一回事。大量练习 JavaScript 是必不可少的,但你可能会感到惊讶,我认为这并不意味着你必须等到掌握它。有些概念事先很重要,但你可以在学习过程中学到很多东西。练习的一部分是学习,所以你可以开始使用 JavaScript,甚至是 React 的一些基础知识,只要你以舒适的速度移动并理解在你尝试任何严肃的事情之前做你的“家庭作业”是一个要求。

立即开始使用 JavaScript

不要费心等到你了解了 JavaScript 的所有方面。那永远不会发生。如果这样做,你将陷入学习 JavaScript 的永远循环中。你们都知道技术领域是如何不断发展和迅速变化的。如果你想开始学习 JavaScript,请尝试阅读 Mandy Kendall 的介绍性文章 通过编写猜谜游戏学习 JavaScript。这是一种快速入门的好方法,当你看到了可能的情况,我认为你可能会发现很难停下来。


via: https://opensource.com/article/22/7/learn-javascript-before-reactjs

作者:Sachin Samal 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

JavaScript 是为 Web 而生的,但它可以做的事远不止于此。本文将带领你了解它的基础知识,然后你可以下载我们的备忘清单,以便随时掌握详细信息。

JavaScript 是一种充满惊喜的编程语言。许多人第一次遇到 JavaScript 时,它通常是作为一种 Web 语言出现的。所有主流浏览器都有一个 JavaScript 引擎;并且,还有一些流行的框架,如 JQuery、Cash 和 Bootstrap 等,它们可以帮助简化网页设计;甚至还有用 JavaScript 编写的编程环境。它似乎在互联网上无处不在,但事实证明,它对于 Electron 等项目来说也是一种有用的语言。Electron 是一个构建跨平台桌面应用程序的开源工具包,它使用的语言就是 JavaScript。

JavaScript 语言的用途多到令人惊讶,它拥有各种各样的库,而不仅仅是用于制作网站。它的基础知识十分容易掌握,因此,它可以作为一个起点,助你跨出构建你想象中的东西的第一步。

安装 JavaScript

随着你的 JavaScript 水平不断提高,你可能会发现自己需要高级的 JavaScript 库和运行时环境。不过,刚开始学习的时候,你是根本不需要安装 JavaScript 环境的。因为所有主流的 Web 浏览器都包含一个 JavaScript 引擎来运行代码。你可以使用自己喜欢的文本编辑器编写 JavaScript,将其加载到 Web 浏览器中,接着你就能看到代码的作用。

上手 JavaScript

要编写你的第一个 JavaScript 代码,请打开你喜欢的文本编辑器,例如 AtomVSCode 等。因为它是为 Web 开发的,所以 JavaScript 可以很好地与 HTML 配合使用。因此,我们先来尝试一些基本的 HTML:

<html>
  <head>
    <title>JS</title>
  </head>
  <body>
    <p id="example">Nothing here.</p>
  </body>
</html>

保存这个文件,然后在 Web 浏览器中打开它。

浏览器中显示的 HTML

要将 JavaScript 添加到这个简单的 HTML 页面,你可以创建一个 JavaScript 文件并在页面的 <head> 中引用它,或者只需使用 <script> 标记将 JavaScript 代码嵌入 HTML 中。在这个例子中,我嵌入了下面的代码:

<html>
  <head>
    <title>JS</title>
  </head>
  <body>
    <p id="example">Nothing here.</p>

    <script>
      let myvariable = "Hello world!";

      document.getElementById("example").innerHTML = myvariable;
    </script>

  </body>
</html>

在浏览器中重新加载页面。

在浏览器中显示带有 JavaScript 的 HTML

如你所见,<p> 标签仍然包含字符串 "Nothing here",但是当它被渲染时,JavaScript 会改变它,使其包含 "Hello world"。是的,JavaScript 具有重建​​(或只是帮助构建)网页的能力。

这个简单脚本中的 JavaScript 做了两件事。首先,它创建一个名为 myvariable 的变量,并将字符串 "Hello world!" 放置其中。然后,它会在当前文档(浏览器呈现的网页)中搜索 ID 为 example 的所有 HTML 元素。当它找到 example 时,它使用了 innerHTML 属性将 HTML 元素的内容替换为 myvariable 的内容。

当然,我们也可以不用自定义变量。因为,使用动态创建的内容来填充 HTML 元素也是容易的。例如,你可以使用当前时间戳来填充它:

<html>
  <head>
    <title>JS</title>
  </head>
  <body>
    <p id="example">Date and time appears here.</p>

    <script>
      document.getElementById("example").innerHTML = Date();
    </script>
    
  </body>
</html>

重新加载页面,你就可以看到在呈现页面时生成的时间戳。再重新加载几次,你可以观察到秒数会不断增加。

JavaScript 语法

在编程中, 语法 syntax 指的是如何编写句子(或“行”)的规则。在 JavaScript 中,每行代码必须以分号(;)结尾,以便运行代码的 JavaScript 引擎知道何时停止阅读。(LCTT 译注:从实用角度看,此处的“必须”其实是不正确的,大多数 JS 引擎都支持不加分号。Vue.js 的作者尤雨溪认为“没有应该不应该,只有你自己喜欢不喜欢”,他同时表示,“Vue.js 的代码全部不带分号”。详情可以查看他在知乎上对于此问题的 回答。)

单词(或 字符串 strings )必须用引号(")括起来,而数字(或 整数 integers )则不用。

几乎所有其他东西都是 JavaScript 语言的约定,例如变量、数组、条件语句、对象、函数等等。

在 JavaScript 中创建变量

变量是数据的容器。你可以将变量视为一个盒子,你在其中放置数据,以便与程序的其他部分共享它。要在 JavaScript 中创建变量,你可以选用关键字 letvar 中的一个,请根据你打算如何使用变量来选择:var 关键字用于创建一个供整个程序使用的变量,而 let 只为特定目的创建变量,通常在函数或循环的内部使用。(LCTT 译注:还有 const 关键字,它用于创建一个常量。)

JavaScript 内置的 typeof 函数可以帮助你识别变量包含的数据的类型。使用第一个示例,你可以修改显示文本,来显示 myvariable 包含的数据的类型:

<string>
let myvariable = "Hello world!";
document.getElementById("example").innerHTML = typeof(myvariable);
</string>

接着,你就会发现 Web 浏览器中显示出 “string” 字样,因为该变量包含的数据是 "Hello world!"。在 myvariable 中存储不同类型的数据(例如整数),浏览器就会把不同的数据类型打印到示例网页上。尝试将 myvariable 的内容更改为你喜欢的数字,然后重新加载页面。

在 JavaScript 中创建函数

编程中的函数是独立的数据处理器。正是它们使编程得以 模块化。因为函数的存在,程序员可以编写通用库,例如​​,调整图像大小或统计时间花费的库,以供其他和你一样的程序员在他们的代码中使用。

要创建一个函数,你可以为函数提供一个自定义名称,后面跟着用大括号括起来的、任意数量的代码。

下面是一个简单的网页,其中包含了一个剪裁过的图像,还有一个分析图像并返回真实图像尺寸的按钮。在这个示例代码中,<button> 这个 HTML 元素使用了 JavaScript 的内置函数 onclick 来检测用户交互,它会触发一个名为 get_size 的自定义函数。具体代码如下:

<html>
  <head>
    <title>Imager</title>
  </head>
  <body>

    <div>
      <button onclick="get_size(document.getElementById('myimg'))">
        Get image size
    </button>
    </div>
    
    <div>
      <img style="width: 15%" id="myimg" src="penguin.png" />
    </div>
   
    <script>
      function get_size(i) {
        let w = i.naturalWidth;
        let h = i.naturalHeight;
        alert(w + " by " + h);
      }
    </script>
    
  </body>
</html>

保存这个文件,并将其加载到 Web 浏览器中以尝试这段代码。

自定义的 get_size 函数返回了图像尺寸

使用 JavaScript 的跨平台应用程序

你可以从代码示例中看到,JavaScript 和 HTML 紧密协作,从而创建了有凝聚力的用户体验。这是 JavaScript 的一大优势。当你使用 JavaScript 编写代码时,你继承了现代计算中最常见的用户界面之一,而它与平台无关,那就是 Web 浏览器。你的代码本质上是跨平台的,因此你的应用程序,无论是简单的图像大小分析器还是复杂的图像编辑器、视频游戏,或者你梦想的任何其他东西,都可以被所有人使用,无论是通过 Web 浏览器,还是桌面(如果你同时提供了一个 Electron 应用)。

学习 JavaScript 既简单又有趣。网络上有很多网站提供了相关教程,还有超过一百万个 JavaScript 库可帮助你与设备、外围设备、物联网、服务器、文件系统等进行交互。在你学习的过程中,请将我们的 JavaScript 备忘单 放在身边,以便记住语法和结构的细节。

JavaScript 备忘单

via: https://opensource.com/article/21/7/javascript-cheat-sheet

作者:Seth Kenlon 选题:lkxed 译者:lkxed 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

微软提案为 JavaScript 增加类型注释

如果本周微软公布的 一项提案 能够成功,那么 JavaScript 开发者很快就会拥有他们中许多人长期以来一直想要的东西:一个类型系统,至少是某种类型系统。该提案建议在 JavaScript 代码中添加类型注释,允许这些注释被 TypeScript、Flow 之类的外部类型检查器检查,而在运行时被忽略。虽然该提案是微软提出的,但是并没有提议将 TypeScript 的类型检查放到浏览器或运行时中。

老王点评:这也不失一种好的解决方案,其它语言已有类似的成功实践。

Arch Linux 20 岁了

2002 年 3 月 11 日宣布,代号为 “Homer” 的 Arch Linux 0.1 版在发布时并没有大肆宣传。其发布公告非常低调:“我终于把一个可启动的 iso 镜像放到 ftp 站点上了。坏消息是,没有漂亮的交互式安装程序。但如果你想要一个这样的东西,你就会选择 RedHat,对吗? ; )” 第一个版本的内核是 2.4.18,那时甚至连 USB 都不能自动挂载。在这个版本中,连 GNOME 和 KDE 都没有,你必须等待当年 12 月的发布 0.4 版本,或者自己构建。

老王点评:从最初的简陋发行版,到如今已经生生地在 RedHat 和 Ubuntu 之间辟出一块地,真是不容易。

2021 发现了最多的 Chrome 零日漏洞

2021 年是 Chrome 浏览器中 零日漏洞数量 创纪录的一年。去年有 25 个浏览器零日漏洞被修补,其中 14 个是 Chrome 浏览器,6 个是 Safari 的 WebKit 引擎,4 个是 Internet Explorer。而 2020 年,只有 14 个浏览器零日缺陷,其中一半以上是 Chrome 浏览器的。但在 2015 年至 2018 年期间,没有发现 Chrome 的零日漏洞。

老王点评:这说明对浏览器的恶意利用越来越多了,浏览器承载了太多的重要性和复杂性。

为你的用户提供选项是任何应用的一个重要功能,而 Commander.js 使它变得容易做到。你最喜欢的 JavaScript 命令行构建器是什么?

 title=

JavaScript 是一种为 Web 开发的语言,但它的用处已经远远超出了互联网的范畴。由于 Node.js 和 Electron 这样的项目,JavaScript 既是一种通用的脚本语言,也是一种浏览器组件。有专门设计的 JavaScript 库来构建命令行界面。是的,你可以在你的终端中运行 JavaScript。

现在,当你在终端中输入一个命令时,一般都有 选项,也叫 开关标志,你可以用来修改命令的运行方式。这是由 POSIX 规范 定义的一个有用的惯例,所以作为一个程序员,知道如何检测和解析这些选项是很有帮助的。要从 JavaScript 获得此功能,使用旨在简化构建命令行界面的库很有用。我最喜欢的是 Commander.js。它很简单,很灵活,而且很直观。

安装 node

要使用 Commander.js 库,你必须安装 Node.js。在 Linux 上,你可以用你的包管理器安装 Node。例如,在 Fedora、CentOS、Mageia 和其他系统上:

$ sudo dnf install nodejs

在 Windows 和 macOS 上,你可以 从 nodejs.org 网站下载安装程序

安装 Commander.js

要安装 Commander.js,请使用 npm 命令:

$ npm install commander

在你的 JavaScript 代码中添加一个库

在 JavaScript 中,你可以使用 require 关键字在你的代码中包含(或者导入,如果你习惯于 Python)一个库。创建一个名为 example.js 的文件,并在你喜欢的文本编辑器中打开它。在顶部添加这一行,以包括 Commander.js 库:

const { program } = require('commander');

JavaScript 中的选项解析

要解析选项,你必须做的第一件事是定义你的应用可以接受的有效选项。Commander.js 库可以让你定义短选项和长选项,同时还有一个有用的信息来澄清每个选项的目的。

program
  .description('A sample application to parse options')
  .option('-a, --alpha', 'Alpha')
  .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');

第一个选项,我称之为 --alpha(简写 -a),是一个布尔型开关:它要么存在,要么不存在。它不需要任何参数。第二个选项,我称之为 --beta(简写 -b),接受一个参数,甚至在你没有提供任何参数的情况下指定一个默认值。

访问命令行数据

当你定义了有效的选项,你就可以使用长的选项名称来引用这些值:

program.parse();

const options = program.opts();
console.log('Options detected:');

if (options.alpha) console.log('alpha');
 
const beta = !options.beta ? 'no' : options.beta;
console.log('beta is: %s', beta);

运行应用

试着用 node 命令来运行它,首先不使用选项:

$ node ./example.js 
Options detected: 
beta is: Foo

在用户没有覆盖的情况下,beta 的默认值被使用。

再次运行它,这次使用选项:

$ node ./example.js --beta hello --alpha
Options detected: 
alpha
beta is: hello

这次,测试脚本成功检测到了选项 --alpha,以及用户提供的 --beta 选项的值。

选项解析

下面是完整的演示代码供你参考:

const { program } = require('commander');

program
  .description('A sample application to parse options')
  .option('-a, --alpha', 'Alpha')
    .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');

program.parse();

const options = program.opts();
console.log('Options detected:');

console.log(typeof options);

if (options.alpha) console.log(' * alpha');
const beta = !options.beta ? 'no' : options.beta;
console.log(' * beta is: %s', beta);

在该项目的 Git 仓库 中还有更多例子。

对任何应用来说,包括用户的选项都是一个重要的功能,而 Commander.js 使它很容易做到。除了 Commander.js,还有其他库,但我觉得这个库使用起来很方便快捷。你最喜欢的 JavaScript 命令行构建器是什么?


via: https://opensource.com/article/21/11/javascript-command-line-apps

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

看不见的 JavaScript 后门

我们之前在 443 期报道 过,剑桥大学的研究人员披露了在源代码中隐藏人眼看不见的漏洞的攻击方法,它利用了 Unicode 中的特殊字符,通过方向覆盖、同形异义等方法创造出对编译器和人类视觉上存在差异的源代码。现在,安全研究人员披露了在 JavaScript 中发动类似攻击的方法。在 JavaScript 中创造看不见的后门首先需要寻找能被 JS 解释为标识符/变量的不可见的 Unicode 字符,然后寻找使用不可见字符不被注意到的方法。这种方法无法通过语法高亮检测出来。

老王点评:看来以后审计后门光凭眼睛看还不行,还需要一个能识别这种隐藏字符的工具。

苹果将很快允许指定用户继承 iCloud 数字遗产

此前遇到家人离世的时候,苹果一直没能提供一个简单访问其 iCloud 账户的方法,更别提在不知道密码的情况下解锁设备了。此外,即使提交了死亡证明,这些用户的数据也无法向继承人交付。在近日的 iOS 15.2 更新中,该公司已允许用户指定五个 继承人账号。要激活继承,继承人仍需向苹果官方提交死亡证明、以及可能需要法院确认其继承权。在苹果之前,以 Google 和 Facebook 为代表的许多科技企业,也都设立了允许指定用户访问他人账户的访问机制。

老王点评:确实,数字遗产已经是现代社会不可或缺的一部分,科技产品需要有完善的机制来处理它。

苹果 CEO 说,想用侧载应用的用户可以使用安卓

在围绕 App Store 的审查和用户如何在 iPhone 上下载和安装应用程序方面,苹果公司 CEO 在 DealBook 峰会上说,“如果这对你很重要,那么你应该买一部安卓手机。从我们的角度来看,这就好比我是一个汽车制造商,告诉客户不要在车里装安全气囊和安全带。”他表示,如果不能最大限度地保证安全和隐私,它就不是 iPhone 了。

老王点评:其实我是支持苹果这种“封闭”的态度的,但是这种封闭需要更透明的信息公开。