如题
不能进行简单的比较。当初Java很火,当然现在依然很牛。JavaScript本来的名字不是这么叫的,但为了傍名牌而进行的一种营销策略,在script前面加上Java,混淆视听,这两种语言没有多大的关系。后来JavaScript还真牛鼻起来了,怎么牛鼻呢?就是把其他也用于前端开发的动态交互语言给干趴下了,自己在前端领域独领风骚!当然由于JavaScript的语法过于宽松,*,往往存在很多坑,名声不是太好。幸好ES6出来以后,得到了更好的规范。只要涉及的前端开发,JavaScript是跑不了的,GitHub上排名非常靠前的。各大排名机构中,JavaScript通常不会低于第六名。并且node.js出来以后,大家更重视JavaScript了。虽然node.js目前不能替代后端开发,但是JavaScript作为前后端都可以编写的语言,大家不得不重视!
难度各有千秋,真正难的是数据结构与算法再加设计模式,这些都是一样的。
不同阶段的人或不同视角的人理解是不一样的。
JS一开始简单,Java上手要难些。JAVA配置环境就复杂些。
但是越往后面走JS越难,在中高级阶段JS更难些,毕竟动态的不如静态的好掌握。
但再往后走Java与JS就都很难了,要理解语言的原理了。JS需要深入解析引擎,JAVA则需要深入JVM。你需要写个引擎了。
过了这个阶段,再往上走应该都很简单了吧。那些大神还在意语言么?
初级程序员很多,中级也多,真的高级的很少,高级之上大牛、大神的基本见不到。
所以看别人的回复也没有。
从难易程度上来说,Java语言要比JavaScript语言更复杂一些,同时Java语言涵盖的内容也比JavaScript语言更多,Java的应用场景也更广。
刚开始学的话,java内容更多,javascript特别简单。java是静态类型语言,比javascript多了数据类型、类、接口、包等概念,自带的类库也比javascript自带的函数多的多,而且运行环境还得配置,需要安装jdk,配置环境变量,安装ide等等。而javacript直接在浏览器控制台就可以快速开始学习。这几方面都决定了java比javascript入门难度更大。但是入门以后,仅针对语言的难度来说,javascript的难度就超过java了。javascript灵活多变,比如闭包,无处不在的类型转换,this的理解,原型……现在又有es6,语法比java内容更多了,更难理解了。但是从工程方面来说,各自都能做出很庞大、很复杂的项目,难度都有无限大的可能,就看你自己的能力了。
看到题目,情不自禁想起了一个有趣的问答:
问:Java和JavaScript是什么关系?
答:雷锋和雷峰塔的关系
是的,当年为了自身发展,巧借Java名声,取名为Javascript。如今JavaScript名声鹊起,喊出了“能用JavaScript写的,最终都要用JavaScript写”的壮志豪言。
会者不难,难者不会,当你能深刻理解两者语言的异同时,剩下的就变得简单了。
下面简单梳理一下两者异同:
当年面试我的公司CTO就问我,“你觉得Java和JavaScript两种开发语言的最大区别是什么?”
我当时从两者语法方面进行了分析,显然很业余,实际上两者最大的区别时:Java是同步思想占主导的开发语言,大部分代码是一行一行的往下执行;而JavaScript是异步思想占主导的开发语言,从一些原生的方法中就能看出,例如setTimeout(),setInterval()。
从难易程度上来说,Java语言要比JavaScript语言更复杂一些,同时Java语言涵盖的内容也比JavaScript语言更多,Java的应用场景也更广。
JavaScript是脚本语言,虽然JavaScript也可以做后端开发,但是JavaScript更广泛的应用是前端开发,因此JavaScript的语法具备脚本式语言简单的特点,但是JavaScript的内容却并不少,也需要一个系统的学习过程。目前JavaScript的发展前景还是非常不错的,正在被越来越多的开发者所重视,目前NodeJS的大量使用就是一个很好的说明。
Java的应用场景非常多,包括Web开发、大数据开发、物联网开发等领域都有大量的Java应用,Android的App开发目前也要使用Java语言。如果要学习Android开发,需要经过两个阶段的学习,下面分别做一个简单的阐述:
第一阶段,Java基础阶段。Java基础阶段的学习包括Java面向对象基础语法,包括封装、继承、多态、异常处理等内容,另外Java的图形界面开发部分最好也要学习一下,因为Android开发的重点就在图形界面上,很多概念是互通的,包括容器、布局、事件处理等方面。另外还需要重点学习一下网络开发、多线程开发的内容,虽然Android对数据库部分的要求并不高,但是最好也要学习一下,毕竟Android开发也需要操作本地的Sqlite数据库。
第二阶段,Android开发阶段。Android开发包括以下几个基本内容,分别是Activity(Android开发的大部分内容都集中在Activity的开发上,Activity代表了Android的界面部分)开发、Fragment开发、SQLite开发、Intent的开发、Service开发和Broadcast开发。总的来说,Android开发并不复杂,但是需要做大量的实验。
通常情况下,如果有一定的计算机基础,一个月左右的时间就能做一个简单的Android应用了。
我带移动互联开发团队多年,我会陆续在头条上写一些关于Android开发方面的文章,感兴趣的朋友可以关注我的头条号,相信一定会有所收获。
如果有软件开发方面的问题,也可以咨询我,谢谢!
JavaScript更难,母庸质疑。
JavaScript要比java复杂很多因为这两者的名字比较像,所以很多人都会拿JavaScript和java相比,但实际上,这两者的关系就像是眉山和峨眉山——没什么直接联系。
客观来讲,java并不难学,如果在先前对于C语言有过系统的学习过,那么在学习java的过程中可谓是事半功倍的。Java是一门面向对象编程语言,是C和C++的集大成者,去前者精华去其糟粕,在吸收了C/++优点的同时,摒弃了难以理解的多继承、指针等晦涩的概念,但要注意的是,严格来说java还是沿用了指针的思想,这点在对象引用中就能看出。因此Java在底层做了很多封装的工作,使得语言一方面功能强大,另一方面还简单易用,多年来一直是编程排行榜上的状元郎。
再看JavaScript,和Java一样诞生于1995年,由不世出的天才人物Brendan Eich用了十天时间一人开发完成。虽然一开始JavaScript还是比较精简的,但随着越来越多人的使用,JavaScript现在已经拥有极为丰富和活跃的类库以及框架,让人应接不暇。最关键的是,JavaScript有太多的东西需要用户自己去理解,而java已经将大多数内容都做成了范式,不需要考虑太多,用就完事了。而JS需要你在学好基础性的东西后,再做出一套属于自己的思想方法体系,这就导致很多初学者越学越痛苦,就像老虎吃天无从下爪一样。
JavaScript上手快,想做好绝非易事相信不少人在刚接触JS的时候,都会觉的哦,so easy嘛!但学着学着就发现不对劲了,咋这么凌乱呢?JS更新的速度非常快,当然了JS本体更新的速度大多数人还能接受,但算上各种内容各种框架,可能java十年来的更新量都比不上JS一年更新的内容。退一万步讲,把那些乱七八糟的框架都抛开,仅仅看两个语言本身,JS还是要比java深奥很多的。java中最难理解的应该是泛型,但即使不深究泛型原理,直接使用泛型也没有问题。而JS就不一样了,一方面资料少的可怜,另外就是不知道是不是Brendan Eich为了敷衍了事留了诸多坑,像闭包,原型链,高阶函数,工作域这些东西,去问一些搞了很多年的前端开发工程师,他们也无法从理论上弄明白。至于网上众说纷纭的JS学习法,总结起来也就一句话:没别的,怼文档吧!
(都看到最后了,麻烦点个赞和关注吧,谢谢!)JavaScript更难。
1. 语言历史及特性Java:Java 参考了C/C++ 的一些设计,是一种真正的面向对象的语言,在Java里真是“一切皆对象”。Java 抛弃了许多C/C++里的一些坑(指针、多继承等),规定了很多特性。在很多时候我们只要按照Java 所给的规定、范式里来写代码就行了,很多东西Java已经帮你准备好了,只要在确定的地方、确定的时间做确定得事请。
所以,Java 就像一个守规矩的贴心女仆。
JavaScript:JavaScript的出生就不一样了,它不仅参考了C语言的语法,Lisp的特性,就连名字也参考了 Java (当然我们也可以叫它C语法的lisp),是一种基于对象(Object-Based)和事件驱动(Event-Driven)的编程语言。
在JavaScript中,有很多东西需要我们自己去理解(继承、闭包、作用域等),再加上JavaScript自己又有很多的特性(坑),这就导致我们有时候很难理解其中的一些代码。
所以,Javascript则像一个随心所欲需要调教的大小姐。。。
2. JavaScript的一些特性(坑)NaN == NaN // false
undefined == null // true
undefined === null // fals
以前看到过一句话,觉得挺有道理的。
“如果你想学好 JavaScript,应该把(ES 3/5/6/7/8)里的烂语法、好语法都学会。”
Java的最优实践基本都是围绕类库和框架怎么用的;
JS的最优实践还有太多是代码怎么写上面。
关于Java和JavaScript两种语言,我都有接触过。所以谈一谈我对这两种语言使用的一些感受,希望对小伙伴们有一定的帮助和借鉴意义。
Java是一种强类型的面向对象的编程语言,Java可以很好地对现实世界的各种事物之间的关系进行描述并建模,从而实现你想要的软件模型。通常在中大型软件中,用Java这种面向对象的编程语言就能很好地帮你理清事物之间的逻辑关系。
目前Java的应用领域主要集中在Android开发和后端开发。其中Android开发就是开发Android版的APP,比如我们使用的Android版的今日头条。Java后端开发则主要是和数据库打交道,并面向前端提供数据的支撑。
javaScript虽然和Java只有Script之差,但两者是两种截然不同的编程语言。JavaScript是一种非常灵活的编程语言,其主要有ECMAScript + BOM + DOM 三部分组成。
其中ECMAScript部分在设计之初就存在着一些诟病,导致现在除了有ES5的语法之外,还新增了ES6语法。所以对于新手而言,除了要掌握ES5语法,还需要了解ES6以及将来的ES7的语法,才能更好地掌握ECMAScript的使用。
对于BOM和DOM部分,由于不同浏览器对其支持度不一致,导致了你也需要了解每种浏览器的兼容性是怎样的,才能更好地去使用JavaScript的BOM和DOM语法。所以这就进一步增加了学习这门语言的复杂度。
通常JavaScript语言的使用主要集中在Web前端。也就是通过JavaScript语言,你就可以实现web页面各种交互的效果。
就上述分析,个人认为Java语言设计是完美并且好用的,很好地贴合了现实世界各种事物之间的关系。而JavaScript相对灵活但较难以使用,至今仍处在较大的迭代之中,但由于其在Web端具有不可替代的作用,所以至今仍无法撼动。
如果你觉得文章不错或者对你有帮助,欢迎点赞转发。关注我,分享好玩科技,探索未知世界!
(抛开,类库、框架、应用程序的规模 等 因素,小石头 仅仅 就语言本身的特性 来回答这个问题。)
从纯语言上来看 JavaScript 比 Java 难度大。
从语言历史看早在计算机出现之前,逻辑学家伙同数学家,就对 “计算”进行的深入的研究,直到哥德尔 时期 出现的 《递归论》为“计算”奠定了 坚实的理论基础。 之后,关键人物:丘奇 登场,他在递归论的基础上创立的 λ-演算系统——这是,第一个被广泛使用的计算系统。 再之后,数学天才 图灵 登场,他 在师从 丘奇 期间,又创立了 图灵机——这是,另一个被广泛使用的计算系统。再再后来,他俩合作证明了 两个计算系统的 等价性。至此,历史时间为 1936年,数学已经为 计算机的诞生,建立了完整的 理论基础。
1946年,大神,冯诺依曼,以图灵机为理论依据,提出了 冯诺依曼体系结构,并且世界上第一台计算机 ENIAC 诞生。1956年,第一个高级语言——Fortran语言,在 巴克斯 开发下 正式诞生,将高级语言编译为机器指令的 模式 从此确立。之后 高级语言,经历了 从 面向命令 → 面向过程 → 面向对象 的演变,直到 C++ 完全成熟。1995年,Java在吸收了 C++语言特性之后,第一次将 程序运行在了 JVM(Java虚拟机)之上。从 现实的 ENIAC 到模拟的 JVM,它们从来没有 离开 图灵机的指引。而不管是不是正规的科班出身,全世界计算机教育的主流都是 冯诺依曼体系结构。因此,Java语言的学习者 从 机器指令切换到 字节码,并不困难,大家很容易 接受 Java 的体系原理。于此同时,面向对象 更是符合人类的思维方式,这使得 Java 跟容易 广泛传播。
阶段性总结:Java = 面向对象 + 图灵机。
图灵机 普照计算机界的时候,λ-演算系统 并没有退出舞台。仅仅比 Fortran 晚 2 年,1958年 麦卡锡 在 λ-演算 的基础上,创立了 Lisp 语言。 Lisp 从一开始就是就有 数据和程序的一致性:符号表达式。于是Lisp自己可以生成自己,这就是 宏。每个Lisper 都可以利用 宏 建立 自己的 方言。时间推进到 1975 年,Lisp 方言,已经相当 混乱,而且 毫无约束的 宏 恣意妄为,于是 MIT 开发出了 方言 Scheme 已经 卫生的宏,并一直以 其为 教学语言,直到 2008年 被 Python 取代。1995年,受雇于 网景公司的 艾克 在研发 一种运行于 浏览器 上的 脚本语言。艾克 原本希望以 Scheme 为蓝本,他的目的是 将 Scheme 办到 浏览器上。然而,1996 年 Java 的成功,以及 Sun 和 网景 的 达成的合作关系,使得,公司高层施压 艾克 让脚本 以 Java为模板,并将 语言命名为 JavaScript。原本雄心勃勃的 艾克 心灰意冷,用了短短 1个星期多时间,草草在已有的 Scheme 研究基础上,包了一个 Java 的语法壳,交给公司 完事。很难想象,一个 语言开发者,对自己的“孩子”如此不满,但 这对 艾克 是事实。JavaScript 这个先天发育不全的早产儿,经过后来无数程序员的共同努力,才在 ES6(ES2015) 趋于完善。
阶段性总结:JavaScript = Scheme 内核(λ-演算系统) + Self 面向对象机制 + Java 语法。
从语言的诞生历史来看,JavaScript 就比 Java 屈折和复杂。
从语言特性看接下来进行具体语言特性的分析比较。
面向对象:面向对象就是将 数据和过程 封装成 类,类 作为 对象的 模板使用,类之间通过继承复用,通过 多态 特化。
Java 使用了 和 早期 C/C++类似的面向对象实现,不过取消了多继承,并升级提供了对象管理 和 反射机制,这使得 Java 非常容易学习和使用。直到后来,才陆续加入,特性 、泛型 和 λ-表达式。这仅仅稍微增加了 Java 的难度。
JavaScript 使用了 Self 的 原型模式,实现面向对象。它的类等价于 对象工厂(构造函数),对象工厂 利用模板(原型)来创建 对象。对象在特化(多态)时仅仅改变自己,不改变公用模板。一系列模板(原型链) 构成复用(继承)关系。在 ES6 之前,以上面为基础,包装出 类似 Java 的面向对象 语法,都是不容易的。好在 ES6 提供了 class 语法糖。
语法结构:Scheme 语言以 广义列表 为 本身的 语法结构,叫做 符号表达式,它 同时是 数据也是代码。例如:
(+ 1 (* 3 4))
可以看成 三个元素 的列表:+, 1, (* 3 4),其中 第三个 元素 又是一个 子列表:*, 3, 4,这个广义列表,如果被运行就是 代码,否则就是 数据。
JavaScript 和 Java 的语法同源,于是 它们都不能,做到 Scheme 的 符号表达式 的高度统一。
先说代码结构。它们将 代码分为:语句 和 表达式 两类。表达式 可以 互相嵌套,但是 表达不能 直接嵌套 语句,必须通过 函数的包装。但毕竟 JavaScript 的内核是 Scheme,因此 在表达式上留有后门:
在 JavaScript 中,可以通过 表达式 达成 语句的效果,这并不奇怪。(虽然 Java 在引入 λ-表达式 后也可以这样做,但这不是 语言原始的,Java 程序员不需要了解。)
再说对象结构。Java 语言的对象结构是黑盒的,静态的,程序员不需要关心。JavaScript 用 散列表代替了 Scheme的 广义列表,作为自己的 对象结构。可以通过 Json 语法创建,. 表达式 读写,for-in 语句浏览, delete 来删除 这些 键值对(属性-属性值),同时还有 属性访问的约束(Java也有)。
函数:Scheme 中函数就是 λ-表达式 的运行结果,它和 数字、符号、字符/字符串 并无区别。
JavaScript 的函数 传承了 Scheme 这一特点,其本身也是对象的一种(特殊对象),而 Java 的函数(方法)就是函数,不能当做对象操作,后来引入的 λ-表达式 才有了前面的特性。
函数对象的引入,使得 在函数中 定义 函数 成了 JavaScript 的家常便饭,这使得理解作用域 和 闭包 成了萌新 的学习难点。
另外,在对象属性调用时,this指针也是 作用域嵌套的一部分。早期 由于 function 不绑定 定义域 内的 this 指针,这带来了很多麻烦(不得不自己用 Object.bind 绑定),ES6 的箭头函数解决了这个问题。
函数对象的另一优势就是 高阶函数(比如:map、reduce、filter、... )的 广泛应用,这部分也需呀一定的学习成本。
泛型:JavaScript 本事就是弱语言,因此其函数对参数来说,就是泛型,可是实现不一定可以支持。Java 有强大的类型系统,可以提供安全的 泛型机制。在这部分 Java 会比 JavaScript 难一些,但还好,Java 没有 C/C++ 基于模板的 泛型机制那么复杂(比如:偏特化)。
Java 是多线程语言,JavaScript 是单线程语言,当他们用于 服务端时,后者的异步很容易出现 嵌套地域。这个问题到 ES2017 才得到解决。
Java是强类型语言,编译器可以帮助我们找到很多Bug,而 JavaScript 是弱类型语言,很多Bug 必须到运行时才 显现,这时的 JavaScript 的调试难度 也 高于 Java。也是因为这样的原因,才出现了 TypeScript 这类语言。(当然,另一面,为了弥补 Java 函数特性不足,也出现了 Scala 这类语言。)
另外,JVM 的 Debug 方便程度 也高于 Chrome。
JavaScript入门简单,不过要学好真的是非常不容易,关键是这玩意儿坑实在是太多了,不过尽管这玩意儿是个垃圾,可是也真的很强大,现在WebAPP已经是常态了,Electron杀入桌面领域了,现在弄个Node想要统一前后端了。
语法层面Java更简单,JavaScript乱七八糟,这也是JavaScript坑多的根本原因,做项目的话肯定Java更难一些,JavaScript稍稍学习就能做一些东西,再就是JavaScript毕竟是界面语言,结合CSS和HTML更符合所见即所得的编程哲学。
JavaScript = C + Lisp+Java?行业里面有两句关于JavaScript的黑话,这两句黑话很好的反映了JavaScript为什么会成为今天的样子,为什么会有这么多的坑。
第一个是JavaScript之父Brendan Eich当时接到公司的工作任务设计一门编程语言,这个任务Brendan Eich并不是特别想做,于是想着敷衍了事就好了,仅仅用了10天时间就设计好了JavaScript这门编程语言。JavaScript之父当年就是为了敷衍了事完成公司的任务,要是他知道自己设计的编程语言今天会这么火,我想他一定会好好设计一下这门编程语言。
第二个是Brendan Eich是*的函数式编程语言爱好者,对Lisp有着非常好的好感,于是Brendan Eich在JavaScript中加入了函数式编程的思想。
有了这两个原则,Brendan Eich设计JavaScript的时候参考了C语言的基本语法,借鉴了Java的内存管理和数据类型,同时也吸取了Scheme等Lisp方言的函数式编程语言的特点,将函数的地位大大提高,当然Lisp里面的“宏”还是没有采用。命名上也是刻意用了“Java”这个字眼,算是打擦边球吧,最终JavaScript就成了一个蹭Java的名气,披着C语言外衣的Lisp语言。
JavaScript到底有哪些比较具体的坑?JavaScript生态也是乱七八糟,ES5、ES,框架什么的更新极快,注意我说的是极快,极其不稳定就意味着你要快速跟进更新。Node、函数库、对象库一堆,内置对象、DOM编程,等你学了之后发现这玩意儿又没法用,到了公司发现公司大家用的都是各种衍生库。
JavaScript涉及到很多面向过程的编程思想,又有很多面向对象的思想。JavaScript还不是传统的经典OO,是多了一层prototype的OO,这一点如果你的以往职业经验学过经典OO的,那么用JavaScript你一定会难受,这个几乎是肯定的。
JavaScript的范式真的是一言难尽,传统范式、OO范式、函数式范式,再给你来点啥事件驱动啊啥的,AOP啥的,这时候你就开始要抓狂了,这到底是什么乱七八糟的玩意儿?
经常有人问我怎么学JavaScript,我的建议就是大家认真学习,认真做项目,还有就是那本大名鼎鼎的《JavaScript权威指南》,看一遍不行再看一遍,看两遍不行就看三遍,看三遍我觉得那你也差不多了,其余的就是怼各个框架的文档,比如React、比如Vue,反正拿到就生怼,不然还能咋办?
本文为作者EmacserVimer悟空问答原创文章,未经允许转载、抄袭必究!