一、JavaScript与C语言的区别
- C语言主要是被编译成机器语言,而JavaScript主要是作为脚本语言被解释器解释执行;
- C语言需要程序员手动管理内存(主要指堆内存的申请和释放),而JavaScript的内存是由解释器来管理的;
- C语言是静态类型语言,即程序运行之前每个变量的数据类型就已经确定,在运行时不能改变,而JavaScript是动态类型语言,变量的数据类型在运行时仍可变化;
- C语言中没有闭包的概念,JavaScript中的函数都与其定义时可访问到的变量组成闭包;
- C语言没有对“类的成员方法”“类的成员的封装(对外不可见)”“类的继承与多态”等面向对象的特性的支持,而JavaScript可以通过原型链和闭包等实现面向对象的继承、多态和封装,实现ECMAScript 2015及以上版本的JavaScript更是在语法层面支持类的定义;
- C语言可以通过调用系统API来实现多线程,可以通过多线程来提高阻塞操作(主要是IO)时的CPU利用率,而JavaScript主要是单线程,JavaScript的可能阻塞的操作都由JavaScript运行时提供的异步API来完成。
- C语言中有int,char,float等等,而JavaScript中只有let(先忽略var),所以转换过程中遇到C语言中的数据类型要换成let。
- C语言中常用一种除法整除取整比如int a = 5/2;,结果就是2。而在JavaScript中这样计算默认会变成2.5,要达到C语言的写法要改成let a = parseInt(5/2)。 除法取余和C语言一样直接使用%就可以了。
二、JavaScript与Java语言的区别
「1. 语言特点」
1.1 弱类型:
- JavaScript是动态的弱类型语言,使用前不需声明变量的数据类型;
- Java是静态类型语言,或称为强制类型语言,变量的类型必须事先定义。
1.2 动态语言:
- Java在定义了一个数组的长度以后就不能再改变了,但是JavaScript却可以。
- Java一个数组只能放同一种类型,但JavaScript可以在一个数组内加不同数据类型的数据。
1.3 脚本语言:
- JavaScript的程序代码由客户端浏览器解释、执行;Java程序则必须先经过编译,转化成class文件,在客户端的JVM环境下执行。
- Java等后台语言都是编译后执行的,但是JavaScript却是边编译边执行。
1.4定位:
Java是一种完全面向对象的编程语言,想要运用Java写东西就必须先设计对象,而JavaScript不一样,它是基于对象和事件的一种脚本语言,它为开发者自带提供了很多内部对象,要更为简易省时。
「2. 数据类型」
2.1 基础数据类型:
- Java有八种基本数据类型:byte、char、short、int、float、long、double、Boolean。剩余都是引用数据类型:类class、接口interface、数组Array。
- JavaScript有五种基本数据类型(值类型):Number、String、Boolean、Null、Undefined、Symbol。三种引用数据类型:Array、Object、Function。
2.2 变量声明
- Java:数据类型 变量名=值;
String a = "abc";
int b = 123;
- JavaScript中定义一个变量或数组,使用var、或者let关键字。定义一个常量,使用const关键字。
let a = "abc";
let b = 123;
- Java:
类型[ ]数组名=new 类型[数量];
类型[ ] 数组名=new 类型[ ]{元素1,元素2…};
- JavaScript:
var 数组名=[ ];
var 数组名=new Array();
「3. 函数」
- Java: 返回值类型 函数名(类型 参数1,类型 参数2…){}
- JavaScript:function 函数名(参数1,参数2…){}
「4. 类」
- JavaScript中的类,成员变量要写在构造函数里。
class A {
constructor(){
let a = 1;// 类内私有成员变量,外部不可调用
console.log(a);
}
}
- Java中的类,成员变量可以写在构造函数外。
public class TypeTest {
int number = 1;
public static void main (String []args) {
System.out.println(new TypeTest().number);
}
}
「5. 程序执行的区别」
- JavaScript是一门脚本语言,它的执行是自上而下,依次执行的。
- Java是一门面向对象的语言,你必须有一个main函数,它的执行是从main函数开始的。
「6. 修饰符的区别」
修饰符是对定义好的变量或者类,进行特殊限定的关键字。
- JavaScript中是没有修饰符的概念的。
- Java中的修饰符分两类:访问控制修饰符、非访问控制修饰符。
访问控制修饰符:public、private、protected、default
非访问控制修饰符:final、static、abstract、synchronized等等。
「7. 抽象类的区别」
- JavaScript中没有抽象类的概念。
- Java中有抽象类的概念。
「8. package」
- JavaScript中没有package的概念
- Java中有package的概念。
package本质上是给类一个命名空间。不同的命名空间内,可以定义名字相同的两个类。
public abstract class A {}
「9.用处」
它们最本质的不同就是用途,Java目前被广泛应用于PC端、手机端、互联网、数据中心等等,而JavaScript则被主要用于嵌入文本到HTML页面,读写HTML元素,控制cookies等。
「10. 其他」
- Java主要在服务端运行;JavaScript主要运行在客户端浏览器中。
- JavaScript 的面向对象是基于原型的(prototype-based)实现的,Java 是基于类(class-based)的;
三、Node和浏览器的区别
1.全局下this的指向不同
浏览器下this指向window,node.js中this指向global,所以window中封装的一些例如alert这些方法在node.js中是无法使用的。
2.使用的引擎不一样;
JS需要浏览器的JS引擎进行解析执行,但是不同的浏览器使用的引擎都是有差别的(所以应用会出现各种兼容性差异),而node.js是基于 chrome v8引擎的运行时环境,引擎一致不管什么环境都不存在兼容性的问题。
3.对于ECMAScript语法来说,在node.js和浏览器中都能运行。node.js无法使用DOM和BOM的操作,浏览器无法执行node.js中的文件操作等功能。
4.使用的模块标准不同,nodejs使用的是CommonJs的模块标准,而浏览器使用的是ES的模块标准所以nodejs中使用的是require()导入模块;浏览器中js使用的是import的方式导入
5.浏览器和node.js都可以看作是JS的运行平台,浏览器是JS在客户端的运行de环境,用于用户的交互效果。而node.js是JS在服务端的运行环境,用于服务器的操作。
6.浏览器和环境Node下,microtask 任务队列的执行时机不同
- Node端,microtask 在事件循环的各个阶段之间执行
- 浏览器端,microtask 在事件循环的 macrotask 执行完之后执行