javascript 定义变量-Java 程序员视角下的 JavaScript

2023-08-23 0 7,868 百度已收录

我们很难在一篇博文中解释 JavaScript 的所有细节。 如果您以某种方式涉足 Web 应用程序开发,我们的 Java 工具和技术范围报告阐明,大多数 (71%) Java 开发人员都属于这一类,只是您被 JavaScript 困住了。 妨碍。

毫无疑问,您已经了解 Java 和 JavaScript,尽管它们的名称相似,但它们彼此之间并没有太多共同点。 Java 的静态类型、简单的语法和冗长与 JavaScript 的动态、缺乏一致性和古怪有很大不同。

然而,由于 Node.js 和 JVM 自己的 Nashorn JavaScript 引擎的开发,Web 编程语言 JavaScript 最近在服务器端获得了相当大的关注。

在本文中,我不想仅仅触及 JavaScript 优点和缺点的表面,也不想重复任何人都可以免费找到的无数 JavaScript 教程。 我想列出一些有助于理解 JavaScript 作为一门语言的技术点,并从马的角度来理解它。

我们将在本文中介绍以下语言级别的技术点:

此外,您还会找到一些工具推荐,如果没有这些工具,您就不想启动 JavaScript 项目,包括用于构建系统代码质量分析和测试框架的工具。

优势

编写一次,几乎到处运行!

无可否认,JavaScript 是网络编程语言,是许多其他语言的编译目标,也是有时人们只是想要更多空闲时间的最终证明。 不过,这并不是一件坏事。 每台能够浏览现代网站的笔记本电脑都配备了强大且可用的 JavaScript 引擎。 最重要的是,JavaScript代码可以在前端运行。

Nashorn 是我们最喜欢的 JVM 中内置的轻量级高性能 JavaScript 运行时,它完全能够解释 JavaScript 脚本,也可以在项目中用 Java 代码解释 JavaScript 脚本。

鉴于每个笔记本运行时都可以自由地使用,JavaScript 是 Java 体验的完美延续。

javascript 定义变量-Java 程序员视角下的 JavaScript

函数式编程:一等公民是函数,而不是递归

JavaScript 中的函数是一等公民。 它们是可以存储在变量中、传递给其他函数并在适当的时间执行的值。

这打开了通往函数式编程世界的大门,函数式编程是结构化 JavaScript 编程的完美形式。

请注意,JavaScript 中的对象是任何事物的映射,对象的每个属性都在同一个映射中:函数、属性、构造函数; 可变性带来了更大的隐患,而对于Java来说,至少可以保证方法和数组结构有一定的稳定性。

这反过来又使得函数式编程变得更加有利:小型、可理解的函数和不可变的数据结构是 JavaScript 的发展方向。

这并不是没有根据的,下面是一个在JavaScript中定义reduce函数的例子,来自《Eloquent JavaScript》一书。

function forEach (array, action) {
for (var i = 0; i < array.length; i++) {
action (array[i]); //apply action to every element of the arra. }
} 
function reduce (combine, base, array) {
forEach (array, function (element) {
base = combine (base, element); // and here we apply function passed as ‘combine’ parameter to ‘base’ and ‘element’ });
return base;
}
function add (a, b) { // btw, this is how you define a function in JavaScript return a + b;
}
function sum (numbers) {
return reduce (add, 0, numbers);
}

注意:这里我们没有使用递归版本的reduce。 JavaScript 没有尾调用功能[注 1],这意味着每个函数的递归版本都会使用堆栈的深度,并且像 Java 一样,如果递归太深javascript 定义变量,程序就会崩溃。

继承:就像现实世界一样

JavaScript 继承是基于原型的。 也就是说,您没有扩展其他类型的类型,但您拥有从其他实例继承功能的实例。

将对象 A 想象为一张地图,我们刚才提到了一点,但是从不同的角度来看,然后另一个像地图一样的对象 B 继承了 A 的所有内容。

这意味着B可以访问A的所有部分:A的方法、字段等。

在实践中,我从未见过有人真正使用简单的基于原型的继承。 通常,当有人需要继承时,他只需构造类,因此您可以使用基于类的继承的所有广泛技术和工作模式。

— Rene Saarsoo,XRebel 前端工程师

我不确定 Java 开发人员应该从中得到什么,但是要小心继承方法的差异,小心父对象,不要意外地改变整个程序的行为。

以便随时避免

列出不可靠的 JavaScript 设计决策比您想象的要容易。 JavaScript 程序中最明显要避免的地方是全局变量的声明。

请注意,在 JavaScript 中,只要不使用 var 关键字定义变量,定义的变量就会被推送到定义它们的作用域的顶部。 这意味着以这些方式定义的每个变量都将被移动到全局作用域的底部,从而给您和您的朋友带来冲突和意外的背痛。

可以启用严格模式。 只要在脚本文件底部写上“use strict”,无意中编译的全局变量声明就会显示错误。

JavaScript 和 Java 的另一个重要区别是,前者是动态类型语言,其本质是一切都可以是任何类型。 这非常明显,我无法再指出:不要为不同类型的值重复使用相同的变量。

跟踪最初是一个字符串类型的变量,但现在它是一个浮点数,或者一个函数,相信我!

另外,我不想太深入地了解类型和布尔值,但请注意 JavaScript 引擎向您抛出的隐式类型转换。

完成工作的技巧

正如我之前提到的,编程需要更多地关注这些语言的语法和怪癖,而不仅仅是了解它们。 项目很少因为语言缺陷而失败,更多的失败与整个项目框架的缺陷有关。 以下是一些可帮助您交付项目的工具。

静态代码分析

大多数项目都是不同的,它们的复杂性和要求导致了如何获取代码库的大量细节。 尽管如此,到处都有一个一致的目标,那就是代码质量。

是的,代码质量,对于任何开发人员来说最重要的工作就是交付。 但不要在质量上妥协,也不要对您提交的代码感到不安全,以至于不想与朋友分享。

javascript 定义变量-Java 程序员视角下的 JavaScript

幸运的是,JavaScript 有一个不错的解决方案 - JSHint。 JSHint 是一个为 JavaScript 构建的静态分析器工具,类似于 Java 代码的 FindBug。 JSHint 可以运行您的代码库并突出显示可疑或有问题的地方,即使您没有立即发现错误,这些地方将来也将无法维护。 在项目中支持它相当简单。 帮自己一个忙 - 如果您正在编写 JavaScript 代码,请使用 JSHint 使其更安全且不那么尴尬。

REPL

REPL 代表“读取-求值-打印循环”(Read-Eval-Print Loop)[注2],它是许多动态语言的强大工具。 如果您见过 Scala 或 Groovy,您当然可以理解这个概念。

激活 JavaScript REPL 的一种方法是打开浏览器的控制台,它形成了用于评估 JavaScript 代码的界面。

另一个方便的工具是 jjs,它捆绑在 JDK1.8 中。

它是一个命令行工具,允许您访问 JDK 中的 Nashorn JavaScript 引擎,完全能够执行这些甚至是最严格的 JavaScript 脚本。

测试

javascript 定义变量-Java 程序员视角下的 JavaScript

对于任何项目,您都需要运行一些测试。 测试对于动态类型语言尤其重要,最好选择一个测试框架。 我推荐 Jasmine,一个用于测试 JavaScript 的行为驱动开发框架。

在Jasmine中,您使用describe来描述测试套件,这会阻止访问您要测试的代码。 待测试的代码完成后,您期望得到一些结果。

显然这不是教程,但我想让您一睹 JavaScript 代码的外观是多么漂亮。 Jasmine 是 JavaScript 项目的最佳实践之一,我们在产品开发的 ZeroTurnaround 项目中私下使用它,特别是 XRebel(始终在线的 JavaScript 交互分析器)。

构建工具

最后javascript 定义变量,您的项目需要什么,更重要的是构建工具。 如果您在 Java 项目中使用 JavaScript,请确保您可以避免使用 Java 构建工具,这几乎就足够了。 然而,对于独立的JavaScript项目来说,没有必要引入这个庞然大物——Maven[注3]。

JavaScript 项目可以考虑的构建工具是 GulpJS [注 4]。 它是一个基于插件的构建系统,您可以向其分配任务。 任务可以是“将 src 目录中的 .js 文件复制到 dest”,或“缩小我的 JavaScript 代码以进行生产”。 令人惊讶的是,GulpJS 将与任务相关的文件流添加到过滤器中,因此您可以将其中的两个任务合并为一次高效的扫描。

还有大量可用的插件,并且通过适当的构建系统,您会发现项目中的协作变得更加容易。

综上所述

我们只了解了 JavaScript 的冰山一角,并试图涵盖 Java 开发人员在处理 JavaScript 时应该了解的一些概念和工具。 当然,这并没有提供要学习的技术的完整列表,但如果您打算毫不犹豫地投入 JavaScript 项目,这将帮助您入门,并且拥抱 JavaScript 的怪癖将帮助您避免过于频繁地打击自己。

您知道哪些让 JS 开发人员高兴的秘密或最佳实践吗? 绝对应该分享! 请在下面发表评论或在 Twitter 上与我聊天:@shelajev。 我很想看看你的想法!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 javascript javascript 定义变量-Java 程序员视角下的 JavaScript https://www.wkzy.net/game/147450.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务