生活小常识为你提供生活中的各种小问题解答。

客观地说java难还是javascript难?

知识问答 admin 18℃ 0评论

关于问题客观地说java难还是javascript难?一共有4位热心网友为你解答:

【1】、来自网友【每日出拳老爷子】的最佳回答:

上手的话肯定是js方便呀。就是jS这东西吧,毕竟是前端的东西,写起来就是感觉有点乱。而且很多时候感觉特别繁琐。比如做个简单的日期转换,都要写一堆,远比不上Python这种方便啊。但是应用场景不同,所以Python是不可能替代jS的。

范围上也是Java更加博大精深。毕竟js只针对网页前端。而Java的应用场景范围要比这大得多。

【2】、来自网友【大唐李卫公】的最佳回答:

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悟空问答原创文章,未经允许转载、抄袭必究!

【3】、来自网友【drinkingcode】的最佳回答:

前言

关于Java和JavaScript两种语言,我都有接触过。所以谈一谈我对这两种语言使用的一些感受,希望对小伙伴们有一定的帮助和借鉴意义。

Java

Java是一种强类型的面向对象的编程语言,

Java可以很好地对现实世界的各种事物之间的关系进行描述并建模,从而实现你想要的软件模型。

通常在中大型软件中,用Java这种面向对象的编程语言就能很好地帮你理清事物之间的逻辑关系。

目前Java的应用领域主要集中在Android开发和后端开发。其中Android开发就是开发Android版的APP,比如我们使用的Android版的今日头条。Java后端开发则主要是和数据库打交道,并面向前端提供数据的支撑。


JavaScript

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端具有不可替代的作用,所以至今仍无法撼动。


如果你觉得文章不错或者对你有帮助,欢迎点赞转发。关注我,分享好玩科技,探索未知世界!

【4】、来自网友【思考思考的动物】的最佳回答:

(抛开,类库、框架、应用程序的规模 等 因素,小石头 仅仅 就语言本身的特性 来回答这个问题。)

从纯语言上来看 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++ 基于模板的 泛型机制那么复杂(比如:偏特化)。

以上是语言层面的简单分析,基本上可以得出 JavaScript 的语言复杂程度 远高于 Java。

从使用维护看

Java 是多线程语言,JavaScript 是单线程语言,当他们用于 服务端时,后者的异步很容易出现 嵌套地域。这个问题到 ES2017 才得到解决。

Java是强类型语言,编译器可以帮助我们找到很多Bug,而 JavaScript 是弱类型语言,很多Bug 必须到运行时才 显现,这时的 JavaScript 的调试难度 也 高于 Java。也是因为这样的原因,才出现了 TypeScript 这类语言。(当然,另一面,为了弥补 Java 函数特性不足,也出现了 Scala 这类语言。)

另外,JVM 的 Debug 方便程度 也高于 Chrome。

以上就是关于问题【客观地说java难还是javascript难?】的全部回答,希望能对大家有所帮助,内容收集于网络仅供参考,如要实行请慎重,任何后果与本站无关!

转载请注明:生活小常识 » 客观地说java难还是javascript难?

喜欢 (0)