UDN-企业互联网技术人气社区

板块导航

浏览  : 1068
回复  : 0

[讨论交流] 当提到“一切皆女(dui)人(xiang)”时,JavaScript程序猿...

[复制链接]
开花包的头像 楼主
发表于 2016-12-13 14:21:04 | 显示全部楼层 |阅读模式
  男人的世界只有 “女人” ,JavaScript世界就只有 “对象”

  就在今天,本司某个None Geek同事问了我一个意味深长的问题,如下:

  “JS中提到的一切皆为对象到底是个啥子意思咧,数值类型也是吗? 为什么有这个说法呢~”(原话)

  那么,今天的故事就从这里拉开帷幕,嘿嘿 ~~

  根据鄙人的老传统,纯技术流派的解释将直接甩到最后,省得让我的读者数量锐减,先说点人话哈,懒得看废话的G客同学们可以直接干到页底,相信各位专家学者也不想听我瞎哔哔,本人这里谢过 , 请勿拍砖, 抵制键盘侠和吃瓜群众, 咱要说就说点儿有水平有技术含量滴 @_@

  首先,刚看到这个问题,我心里居然冒出来一堆很有哲学及其儒家禅意的东西,瞬间感觉自己是不是快成仙了(领悟了传说中的第七感!!)[捂脸]

  问题1. JS里是不是一切皆对象呢?

  是的

  JavaScript作为一门高级语言(脚本),的确一切都是对象,而非基本数据类型。而且不止JS,Java、Python等所有高级语言,都是处于“一切皆对象”的状态

  问题2. 到底啥叫“一切皆对象”呢

  回答这个问题,我们需要先搞明白,高级语言和底层语言的区别:

  底层语言:以C语言为代表,直接操作计算机原始数据;优点在于速度奇高无比,当年我用10台服务器干掉别人200台服务器,就是靠的这个(干什么就不说了,给大家点儿悬念);而缺点同样明显,不安全,你犯下的一个小错误,直接可以把系统干崩掉,因为在你的程序和系统之间没有任何中间缓冲环节, 好比高手过招, 一超错整盘全输

  高级语言:以Java为代表的,从不操作底层数据,对原始数据进行封装然后操作;优点是安全、稳定;缺点自然就是性能确实够低(当然相对来说,只要硬件发展了,任何都是浮云),毕竟任何操作都是在“虚拟层”里完成的(JVM和V8都算),任何操作都得经过人家二手翻译一遍机器才能懂

  那么,问题来了~~~~~~~~

  问题3. 现在我们来回归一下本质:到底什么是“对象”

  在我眼里看来,对象其实有两重含义:

  一种思想、工具:

  人类毕竟是生物,脑容量究竟是有限的,所以无法理解过于复杂的东西;为了降低复杂度,至少降低到程序员能在单位时间中完成的程度,我们需要忽略大部分细节,把精力集中到问题主干上;面向对象的核心就在这里,通过封装屏蔽掉各种细节,帮助人们把精力集中到主要结构上

  简单的例子是,你从来不用在写程序时关心Date.getFullYear、ng-directive、data-role和render的实现细节,否则你智商再高也没时间构建出大型程序

  一种结构、包装:

  从另一种程度上,面向对象说的是一种结构,对硬件基础数据进行包装、添加更多功能,使其易于操作、安全稳定,而当我们说“一切皆女(dui)人(xiang)”时,其实是说的这层意思

  简单的例子是,C语言的原始字符串就是一段连续内存,没有length、没有match、没有charAt,也没有compareTo;不但难以操作,而且还非常容易出问题(你别告诉我没见过内存溢出,谁都年轻过,不丢人)

  喜闻乐见的示意图(非技术的朋友可以忽略)

9.png


  所以,我们明白了“一切皆对象”是真的,那么,两个问题:

  这样好吗

  对我们意味着什么

  这样真滴好吗?

  如果时间回到15年以前,我一定是坚决的“性能派”,脑子里只想着性能必须优化到极致、性能压倒一切、性能就是正义之类的

  不过人毕竟会变得成熟,至少目前我看来可维护性和性能同样重要,甚至性能不敏感的应用中可维护性才是压倒一切的,毕竟当年24小时必须保持3个手机满电的日子真心不是人过的

  首先,我们会发现对象这种东西,确实是性能的大敌,但它对安全性和易用性又有无可匹敌的优势

  其次,要分场景对待,对于人造航天器那种1个字节就是几千美金的应用,没人会去用OOP;而你写个JS,8个G的内存一多半都用不上的情况下,性能倒还真不是最重要的

  所以说: 不同的实际环境,造就了风格不同的解决方案

  对我们意味着什么

  没意味啥,JS又没有本地内联代码,你担心这事儿干啥

  编程哲学就是这么来滴~

  JS中一切皆是对象,或者说一切皆封装,而非原始数据

  这样会牺牲性能,但对安全性和易用性有巨大提升

  对于前端这种“非军”、“非底层”程序而言, 并没有任何问题

原文作者:佚名  来源:开发者头条

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部