當提到“一切皆女(dui)人(xiang)”時,Javascript程序猿到底在說熟么呢??

男人的世界只有 “女人” ,Javascript世界就只有 “對象” 

就在今天,本司某個None Geek同事問了我一個意味深長的問題,如下:

“JS中提到的一切皆為對象到底是個啥子意思咧,數值類型也是嗎? 為什么有這個說法呢~”(原話)

那么,今天的故事就從這里拉開帷幕,嘿嘿 ~~

根據鄙人的老傳統,純技術流派的解釋將直接甩到最后,省得讓我的讀者數量銳減,先說點人話哈,懶得看廢話的G客同學們可以直接干到頁底,相信各位專家學者也不想聽我瞎嗶嗶,本人這里謝過 , 請勿拍磚, 抵制鍵盤俠和吃瓜群眾, 咱要說就說點兒有水平有技術含量滴 @[email protected]

首先,剛看到這個問題,我心里居然冒出來一堆很有哲學及其儒家禪意的東西,瞬間感覺自己是不是快成仙了(領悟了傳說中的第七感?。。捂臉]

問題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;不但難以操作,而且還非常容易出問題(你別告訴我沒見過內存溢出,誰都年輕過,不丟人)

喜聞樂見的示意圖(非技術的朋友可以忽略)

所以,我們明白了“一切皆對象”是真的,那么,兩個問題:

這樣好嗎

對我們意味著什么

這樣真滴好嗎?

如果時間回到15年以前,我一定是堅決的“性能派”,腦子里只想著性能必須優化到極致、性能壓倒一切、性能就是正義之類的

不過人畢竟會變得成熟,至少目前我看來可維護性和性能同樣重要,甚至性能不敏感的應用中可維護性才是壓倒一切的,畢竟當年24小時必須保持3個手機滿電的日子真心不是人過的

首先,我們會發現對象這種東西,確實是性能的大敵,但它對安全性和易用性又有無可匹敵的優勢

其次,要分場景對待,對于人造航天器那種1個字節就是幾千美金的應用,沒人會去用OOP;而你寫個JS,8個G的內存一多半都用不上的情況下,性能倒還真不是最重要的

所以說: 不同的實際環境,造就了風格不同的解決方案

對我們意味著什么

沒意味啥,JS又沒有本地內聯代碼,你擔心這事兒干啥

編程哲學就是這么來滴~  

JS中一切皆是對象,或者說一切皆封裝,而非原始數據 

這樣會犧牲性能,但對安全性和易用性有巨大提升  

對于前端這種“非軍”、“非底層”程序而言, 并沒有任何問題


來源:igeekbar

上一篇: 如何合理的規劃前端之路

下一篇: javaScript & jquery完美判斷圖片是否加載完畢

分享到: 更多
福彩3d杀码 澳洲赛车官方网站 广东11选5人工计划软件 时时定千位 pk10分析号码走势图 彩票开奖查询七星彩 上海时时走势图经网 广东11选五推荐 重庆市彩专家计划软件下载 时时彩一星规律 时时彩超级精准计划群 大富翁棋牌游戏 可以提现看牌抢庄牛牛 抢庄牛牛 全民炸金花可以提现金 ag动物狂欢怎么压分技巧