一、语言基础
JavaScript 是一种脚本语言,最初被设计用于浏览器中的页面交互,但现在也可以在服务器端运行。Java 则是一种通用编程语言,主要应用于后端服务端和客户端应用程序的编写。
JavaScript 基于 ECMAScript 标准,包括语法和内置函数,可以通过 DOM 和 BOM 来访问和修改页面元素及浏览器相关内容。而 Java 则基于 JVM(Java Virtual Machine)虚拟机执行,应用于编写并执行跨平台的代码。
由于 JavaScript 基于 ECMAScript 标准,其代码不需要被编译,可以直接在页面上运行。而 Java 需要先将源代码编译成字节码,再由虚拟机在运行时解释执行。
二、类型系统
JavaScript 是弱类型语言,可以在运行时进行类型转换。Java 则是强类型语言,类型转换需要进行显式声明。弱类型语言的好处是灵活,但是编写不当会产生各种类型错误。相比之下,Java 的类型安全性强,代码的可读性也更好。
// JavaScript 示例
var a = '123';
console.log(a + 10); // '12310'
// Java 示例
String a = '123';
int b = Integer.parseInt(a);
System.out.println(b + 10); // '133'
三、面向对象
JavaScript 是一种基于原型的语言,对象可以通过原型继承来实现。Java 则是基于类的语言,默认情况下继承是通过 extends 关键字实现的。
在 JavaScript 中,可以在运行时动态添加属性和方法到对象中。相比之下,Java 中的类需要定义其所有属性和方法。
// JavaScript 示例
var person = {
name: 'John',
sayHello: function () {
console.log('Hello, my name is ' + this.name);
}
};
person.sayHello(); // 'Hello, my name is John'
// Java 示例
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Hello, my name is " + name);
}
}
Person person = new Person("John");
person.sayHello(); // 'Hello, my name is John'
四、异步编程
JavaScript 支持原生的异步编程,通过回调函数和 Promise 等机制来处理异步事件。这使得 JavaScript 可以在浏览器中处理事件、执行网络请求等任务,而不阻塞页面的渲染。相比之下,Java 的异步编程需要使用线程、Future 或者 CompletableFuture 等机制。
在 JavaScript 中,通过事件循环机制(Event Loop)来执行异步代码。异步代码(如 setTimeout、AJAX 请求等)会被压入事件队列中,等待执行。当 JavaScript 引擎空闲的时候,它会从事件队列中取出一个任务,执行它,直到队列为空为止。
// JavaScript 示例
console.log('Start');
setTimeout(function() {
console.log('After 1 second');
}, 1000);
console.log('End');
// Java 示例
public static void main(String[] args) throws InterruptedException {
System.out.println("Start");
Thread.sleep(1000);
System.out.println("After 1 second");
System.out.println("End");
}
五、函数式编程
JavaScript 支持函数式编程范式,具有闭包、高阶函数、纯函数等特性。而 Java 在这方面的支持较弱,虽然从 Java 8 开始增加了 lambda 表达式和函数式接口,但是相比于 JavaScript 的支持还是较弱。函数式编程可以让代码更简洁、可读性更好,同时也便于并发编程。
// JavaScript 示例
const add = (x) => (y) => x + y;
const add1 = add(1);
console.log(add1(2)); // 3
// Java 示例
interface Add {
int apply(int a, int b);
}
Add add = (a, b) -> a + b;
System.out.println(add.apply(1, 2)); // 3