zoukankan      html  css  js  c++  java
  • 当我们说“一切皆对象”时,我们到底在说什么

    今天,非技术方向的同事问了我一个问题“js中一切皆对象到底是个啥意思,值类型也是?为什么有这个说法呢”(原话),那么,故事就从这里开始


    老规矩,纯技术流解释在后面,懒得看废话的同学直接翻到最后,谢谢


    首先,刚看到这个问题,我心里居然冒出来一堆很禅意的东西,瞬间觉得自己是不是快成仙了[捂脸]

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

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

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

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

    底层语言:以C语言为代表,直接操作计算机原始数据;优点在于速度奇高无比,当年我用10台服务器干掉别人200台服务器,就是靠的这个;而缺点同样明显,不安全,你犯下的一个小错误,直接可以把系统崩掉,因为在你的程序和系统之间没有任何中间环节
    高级语言:以Java为代表的,从不操作底层数据,对原始数据进行封装然后操作;优点是安全、稳定;缺点自然就是性能确实够低,毕竟任何操作都是在“虚拟层”里完成的(JVM和V8都算),任何操作都得经过人家倒手一遍才行

    那么,问题来了

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

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

    一种思想、工具:###

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

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

    一种结构、包装:###

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

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

    喜闻乐见的示意图###


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

    1. 这样好吗

    2. 对我们意味着什么

    这样好吗##

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

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

    首先,我们会发现对象这种东西,确实是性能的大敌,但它对安全性和易用性又有无可匹敌的优势
    其次,要分场景对待,对于人造航天器那种1个字节就是几千美金的应用,没人会去用OOP;而你写个JS,8个G的内存一多半都用不上的情况下,性能倒还真不是最重要的

    对我们意味着什么##

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


    接下来说点结论吧

    =纯技术流的分割线=

    1. JS中一切皆是对象,或者说一切皆封装,而非原始数据
    2. 这样会牺牲性能,但对安全性和易用性有巨大提升
    3. 对于前端这种“非军”、“非底层”程序而言,这样并没有任何问题

    =end of 纯技术流的分割线=

    家里快没电了又懒的冲,过得担惊受怕的,啥时候支付宝不光能充电还能查询剩余电量就好了啊 @马云

  • 相关阅读:
    基于硬件的毕业设计论文的书写
    C语言程序设计课程总结
    嵌入式程序设计第三周成绩汇总
    C第十八次课
    2016-4班平时成绩第9周排名和汇总
    2016-3班平时成绩第9周汇总和排名
    第十七次课大纲
    第十六次课大纲
    2020-02-28
    2020-02-27
  • 原文地址:https://www.cnblogs.com/dancingblue/p/JavaScript.html
Copyright © 2011-2022 走看看