首页 > 语言 > 关键词 > JavaScript最新资讯 > 正文

对现代开发来说,JavaScript是一种垃圾语言

2013-11-28 14:07 · 稿源:伯乐在线
文章目录

日前,Reddit/Programming 频道的头条热帖是一篇来自 julik live 博主的技术吐槽文,最初的英文标题是“For modern development Javascript indeed is a shit language”。该文在Reddit得分是800+,引发了热评(930+评论)。感谢@蔡volvo蔡 的热情翻译,以下是译文。

 我很抱歉,但 Crockford 就是坚持这么写的(I’m sorry, but the Crockford arguments do not cut it.)

Javascript在很多方面都烂透了,而且还极其无趣,我就纳了闷了,大家为啥都义无返顾,群情激奋的跳进Node学习的大军里,是!Node是比Ruby快,Node是基于事件模型处理的,但让我无法理解的是,一些人动不动就想把自己的程序用Node重构一下,过过脑子行吗!

Javascript的继承,深拷贝问题,不是定义一个新ECMA标准就能解决的,不是套个漂亮的语法外壳(比如CoffeeScript)就能搞定的,不是用require实现个标准化或者引入classes就可以万事大吉的,ECMA语言里不是有个引入classes的ActionScript吗!那玩意跟Javascript一样屎,只要大家继续用它,PHP框架的现状就是JS的未来— 一堆一堆的人前赴后继,日以继夜的为这坨屎一样的语言搭框架、写工具。

我来说一下为什么Javascript糟糕,当然了,它也有好的方面。 但是问题就是太不实用。比如说原型继承(prototypal inheritance)就限制颇多-因为这玩意说白了就是function override,还有就是那句:“万物皆function” 也是相当的废柴-因为一function不是一个对象,也不能当做数据机构来承载数据。

其实真正的吐槽才刚刚开始,随便列几个吧:

JS的调用属性

看这个屎一样的设计,回顾过去,咱们很难苛责语言的设计人员,因为它们可能处于性能考虑,再者,如果不习惯消息-传递机制的语言的话,你会觉得怎么”一些属性可以被调用而另外一些就不可以呢“!

哈希对象对于stable 键不可用

对象和哈希的混合不是一个好点子,因为它违反了对象可以拥有metadata的前提,metadata允许我们建立基本类型系统或者至少各种类型的introspection

函数对象对于类型系统不可用 因为一个对象不携带任何类型信息

这可是大事,Ruby的世界里也是这样,感觉所有的东西都在像鸭子一样快乐的嘎嘎叫,我们经常用Object$class 来获取对象信息,下面是给HTML元素加样式的标准的流程:

1
<div class='<%= model.class %>' id='<%= [model.class, model.id].join %>' >…

在JS里是不可能的,因为只有’Object’,’function’和原始类型才有类型信息

到处是Null

不小心用错了一个常量

1
MyApp.SYNC // should have been MyApp.SYNC_FETCH

任何事情都不会发生,因为对象是hashes,而且js给常量默认为0。 带着错误key的常量将会是undefined,而且还会渗透到被调用函数中,等出了事,慢慢跟踪debug去吧

回调的深渊

JS缺少合适的deferred功能,不是多线程,就得靠事件化执行,你的调用会散落在各个事件回调中,代码都完事了,回调还在那执行呢,比如,JS干下面这个是就费劲

1
2
3
4
5
var res = await AjaxReq.fetch('/long-request')
// because you are waiting for a result, here the runtime would
 // schedule event handling, DOM redraws and whatever else it can
 // squeeze in while you await
res.name // this will be only executed once res is available

因为你在等一个结果,就在等待的这会,runtime完全可以进行事件处理、DOM重绘、干啥都行

res.name // this will be only executed once res is available 等res可以使用的时候在去执行res.name的操作

当然了,JS社区做了跟PHP社区一直以来一样的事情-给Javascript这坨屎擦屁股,怎么擦呢?用更多的回调,好点的,就是回调链

1
2
3
4
5
when(<ERMAGHERD RIDICULOUSLY LONG CALLBACK>
 // 48 lines of code down
).then(<HOLYSHIT WHEN WILL THIS BE OVER>
// 23 lines down
).then(<GIVE ME SOME COFFEE ALREADY>)

一般情况下,加入一个wait primitive就在获取结果的等待过程中控制events,

专业一点的做法就是啥玩意咱都异步,现实是你写的代码80%都是同步的,因为程序里80%干的都是一个操蛋的事情跟另外一个操蛋的事情一起搞,而且你需要它俩都它妈的完事了才行。

可怕的异常处理机制

异常处理在JS中机器可怕,一般形式-你可以查看调用堆栈(一堆匿名函数和好点的名字的函数),你可看到错误信息,我就提两个经常碰到的错误:

1
2
undefined is not a function
    cannot call property 'xyz' of undefined

这都拜javascript中“函数对(泥煤)象”所赐,根本没有方法定义-它们只有属性,JS运行时永远没有办法知道函数对象有没有方法可以被调用,或者某个属性名称 – 它就认为你的哈希键不存在,

我记得Ruby社区里的人抱怨Ruby的回溯和错误消息机制不好用,Rubinius就给解决了,在泥煤的javascript里,你知道错误消息特别乱吗?因为有你想得到和使用的两个最最基本,最最重要的异常NameError和NoMethodError 都可能,这在其它语言里都是不能理解的,但javascript语言就这么马马虎虎的用起来了

不可否认,functions是亮点,原型也是好东西,但是如果你想建立一个稍微复杂的JS应用,你就得这么写:

1
2
3
var cv = Marionette.CollectionView.extend({
  itemView: MyApp.Views.WidgetView;
});

如果”MyApp.Views.WidgetView 还没有定义“你会得到啥错误?”undefined is not a function”当然!你什么时候会得到呢?当CollectionView想要实例化你的视图的时候,而不是当你定义变量cv的时候,你会忐忑好几分钟,直到你明白了这错误是哪里导致的

这是为啥呢?因为所有都是hash而且这个语言不能做任何形式的introspection

还有一个困扰我的事就是有些大哥居然从Ruby转战Node,还赞Node是个好东西。Node也许是好宝贝,但是想想它内部运行着屎一样的Javascript语言,我就由衷地想退避三舍。

这么说吧,JS一日不好用,我便一日不会用Node,谢谢

我理解有一些人想跳出MRI架构,投身Node,很简单啊- -你不会说日语, 所以你舔个脸说日语很难学,话撂这,你在MRI上的有精进的机会也它妈趋近于0.

JS是屎,但凡我们有那么一丝丝的担当,就该尽自己的绵薄之力要么让它寿终正寝,要么帮助它更上一层楼,天天在那沾沾自喜对它的发展没有一点帮助,CoffeeScript做的还远远不够。

  • 相关推荐
  • 大家在看
  • 原神语言交流Odomu成就任务攻略 丘丘人语言交流怎么触发

    ​原神中是有一个语言交流的成就可以完成,叫做“...odomu”,成就的需求是在语言交流中与丘丘人交谈成功,很多玩家还不清楚这个语言交流的任务怎么做,下面就来为大家详细的介绍一下。

  • 原神关于剪切板调用问题修复说明公告 iOS14剪切板问题修复

    原神的官方在9月30日的下午发布了关于升级了iOS14之后剪切板系统的公告,很多玩家还不清楚是怎么回事,下面就来为大家分享一下原神关于剪切板调用问题修复说明公告。

  • 当美食成为社交语言,品牌可以擦出火花么?

    十一期间,国内旅游超6亿人次,如此海量的人群跨越山水,去往不同的城市和地域,把所见所闻的体验,又全部生成海量的社交内容。据抖音发布的「2020国庆中秋假期数据报告」显示,上海问鼎今年抖音热门旅游城市榜首,相关的旅游视频点赞数超4515万,累计播放次数超14.5亿,重庆和深圳分别位列二三。除此外还有新上榜的黑马城市苏州和东莞。两个城市相关的旅游视频点赞量也分别高达2761万和1784万,播放量分别突破10亿和6亿。可见每一

  • 中国听力语言康复研究中心联合北大医疗脑健康开展《儿童言语语言治疗师专业技能培训》

    语言康复行业发展的关键标志之一,就是言语治疗师数量与专业化水平的提升。为共同推进国内语言康复专业人员的在职培训,近期,中国听力语言康复研究中心(简称:中语康)联合北大医疗脑健康开展了关于儿童言语语言治疗师的专业技能培训,旨在借助双方专业力量,夯实语言康复的专业建设,探讨并建立国内言语治疗师的认证和考核标准。我国言语治疗师人才极度匮乏。近年来,我国言语障碍患者数量日趋增长。据今年国际聋人日发布的数据

  • 十年后可能消失的五种编程语言

    随着时间的流逝,程序员们发现了更新、更简单的工作方式,新的编程语言如雨后春笋般出现,但只有少数编程语言能成为社区的新宠。这种进步的一个副作用是一些古老的编程语言必然会跟历史一样被人们遗忘。如果一个编程语言无法随着时间的推移提升其价值,那么它的用户群终将会流失,并逐渐淡出人们的视线,或者成为更新一代编程语言的基础。

  • Google宣布了新的云功能:更多的语言支持、增强安全性等

    谷歌在其云平台上提供的功能即服务(FaaS)是云功能,允许开发者构建与第三方服务和api或物联网后端集成的无服务器解决方案。最近,这家公共云供应商宣布了一些云功能的新功能,如更多的语言支持、改进的开发体验、每个功能标识的增强安全性以及更多地区的可用性。谷歌在2018年的下一届云大会上宣布,自其全面可用以来,谷歌继续通过新的更新来增强云功能。这些更新包括对Java、Go、Node.js、还有python。现在,公司进一步扩展了?

  • 为什么Java、Python会成为程序员最害怕的编程语言?

    最不受欢迎 / 最令人畏惧的编程语言有哪些?这些编程语言为什么令人畏惧?对它们的评价是否公正?在 StackOverflow 的 2020 年度开发者调查中,有一张表格,显示的是“最受欢迎、最令人畏惧和最想要的编程语言”。最受欢迎的和最想要的编程语言,嗯,是有点无聊。倒是那个最令人畏惧的就有意思多了。正如托尔斯泰(Tolstoy)所说的:“幸福的家庭都是相似的,而不幸的家庭则各有各的不幸。”

  • 华为方舟编译器正式支持C语言:完全开源

    2019年8月底,华为方舟编译器(OpenArkCompiler)正式开源,迈出了跨越性的一步。一年多来,方舟编程体系陆续实现了编译器、引擎、调试器的开源,其中编译器的重点功能主要集中在Java应用程序静

  • Python有望超越Java排第二?风变编程解析编程语言新趋势

    随着人工智能时代的来临,编程语言的热度居高不下,随着智能机器人的出现,在2020年更是迎来一波新的高峰。在这样的大环境下,关于谁是人工智能最流行编程语言的讨论也十分热烈,C、C++、Java、Python等编程语言不断被拿出来做比较。那么接下来,风变编程来解析一波当下编程语言的新趋势。Python受欢迎度有望超越Java?近日,TIOBE编程语言社区公布了2020年10月编程语言排行榜。榜单数据显示,Python的受欢迎程度十分逼近排在第二?

  • 原神如何搭配圣遗物最大化收益 圣遗物属性收益计算攻略

    原神中圣遗物的选择至关重要,圣遗物算是大幅度提升人物属性的最好途径,那么圣遗物要怎么搭配才能使得人物属性的收益最大化呢?下面就来为大家分享一下攻略。

  • Ohayoo举办开发者大会,将投入一亿开发者生态专项基金

    近两年,休闲游戏爆发力十足,释放出新的增长潜力。移动数据监测平台Adjust指出,从 2019 年Q4 到 2020 年Q1,中国休闲游戏用户时长增幅超300%;易观数据显示,中国休闲游戏用户月活跃用户规模已突破 4 亿。游戏开发者如何在市场蓝海中运筹帷幄,决胜千里? 9 月 21 日,Ohayoo开发者大会在上海成功举办,此次大会从游戏开发者痛点出发,聚焦移动游戏行业最后一波红利——“移动原生休闲游戏“赛道的发展,解读Ohayoo平台从研发立项?

  • OKEx早报:开发人员或在10月15日前完成以太坊2.0功能开发

    OKEx早报将在每日早间为您带来最新的行情,以及相关行业动态。帮助投资人在最短的时间内了解夜间的动态消息,更好的握把每日行情。行情速递9月27日讯,昨天BTC收涨,涨幅0.7%,尾盘在10700美元上方震荡。通过OKEx平台交易数据可以看出,今日早间行情相对企稳,BTC开盘报10720.9美元,短时下挫后缓慢上行,最高点触及10800美元,当前略有回落。截至发稿,BTC暂报10792.96美元。据OKEx交易大数据显示,BTC合约多空持仓人数比为0.78,

  • 关于鸿蒙 2.0,那些开发者不知道的一切

    鸿蒙操作系统在推出一年后,鸿蒙 2.0 操作系统如约而至。在 9 月 10 日的华为 HDC 大会上,华为正式开放鸿蒙 HarmonyOS 2.0 源码,并对业界展示了其在商用落地和生态构建的进展,业界开发者对鸿蒙操作系统的全局有了更加清晰的认知。

  • 阿里云HaaS 100开发板开箱试用体验:高性价比IoT应用开发神器

    9月18日,在2020云栖大会上,阿里云智能正式推出一款加速AIoT中小开发者创新的积木式平台HaaS(Hardware as a Service),该产品旨在帮助AIoT中小开发者聚焦业务,低门槛快速组装软硬件积木,实现

  • 房地产开发常见的招标采购策略

    房地产开发常见的招标采购策略在房地产开发中,招标采购一项非常重要的工作,在与建筑商签合同之前,你需要经过思考与规划,制定相应的招标采购策略。招标采购策略必须在项目早期阶段决定,这将有利于整个开发过程,并创建坚实的起点。简单来说,招标采购就是完成商品和服务购买的方法,而这个方法取决于你的环境、商业计划和总体目标。让我们深入了解房地产开发常见的招标采购策略。房地产开发有不同的招标采购策略。招标采购策略

  • 火币观察:阿根廷选择比特币对冲比索,比特币金融属性广泛深化

    近日,自阿根廷此前宣布对美元储蓄和海外购买征收35%的新税后,阿根廷比索大幅下跌。根据Paxful的数据显示,在过去的一个月内,阿根廷比特币的购买量大幅飙升,更多的阿根廷储户将持有的比索兑换成加密货币,以对冲本国货币贬值。在传统金融市场,由于缺乏投资通道和深刻的金融知识,更多的投资者是选择以购买黄金的方式对冲通胀或货币可能贬值的风险。但实际上,黄金对这两种风险的对冲能力都非常差,尤其是通货膨胀保值政府债券?

  • 日本将在月球建燃料工厂:用来大规模开发月球

    【日本将在月球建燃料工厂】据日本《产经新闻》9月29日报道,日本计划在月球上建造燃料生产厂,用来大规模开发月球。日本宇宙航空研究开发机构计划于本世纪30年代中期在月球表面建设燃料工厂,以力争实现大范围月球探测的目标。

  • DNF召唤师护石属性汇总 新版本召唤师护石一览

    DNF最近韩服公布了最新的护石属性,很多玩家还不清楚召唤师的护石属性怎么样,下面就来为带啊详细的介绍一下。

    dnf
  • 华为推出新版AI开发平台 云与计算开发者数量达180万,增长超70倍

    在华为全联接 2020 上,华为云业务总裁郑叶来透露,截至目前,华为云与计算领域开发者数量已达 180 万,而在 2016 年时,这一数字仅为2. 5 万,增长超过 70 倍。

  • 微信支付开发“微信支付月月刷”小程序

    日前,微信支付团队上线了一款名为“微信支付月月刷”的小程序。据该小程序提供的介绍信息可知,“微信支付月月刷”是一款为用户提供精彩好礼和优惠的小程序,

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议
  • 热门标签