1. 程式人生 > >淺談程式語言型別的強型別,弱型別,動態型別,靜態型別

淺談程式語言型別的強型別,弱型別,動態型別,靜態型別

在介紹javascript型別系統之前,我們來解釋兩組區分不同程式語言時,提及的名詞分別為強型別和弱型別,靜態型別和動態型別,

分別從型別安全和型別檢查區分了強弱型別和靜動型別

 

一.通過型別安全區分 分為強型別和弱型別

強型別:語言層面限制了實參型別和形參型別必須相同,如果傳入其他型別的值會報錯,只有在傳入之前轉化為響應的型別,才可以

傳入如下圖所示:

 

弱型別:完全相反,弱型別語言層面不會限制實參的型別,即便是整型的數字,傳入字串型別語法上也是沒問題的,如下圖所示:

綜上所述:強型別不允許有任意的隱式型別轉換,而弱型別允許有任意的隱式型別轉換,比如javascript為弱型別語言,會把隱式轉

化為任意型別,呼叫的時候語法層面都不會報錯如下圖所示:

比如Python為強型別語言,則不會轉換型別,呼叫時候語言層面就會報錯如下圖所示:

2.通過型別檢查區分 動態型別和靜態型別

靜態型別:一個變數宣告時型別就是明確的 宣告過後,它的型別就不允許修改

動態型別:執行階段才能夠明確變數的型別 而且變數的型別隨時可以變化 如下圖所示:

動態型別語言中的變數沒有型別,變數中存放的值是有型別的.

二.JavaScript的型別特徵

javaScript是一門弱型別的動態型別的程式語言,javaScript是一門指令碼語言,沒有編譯環節,直接到執行環境執行,沒有型別檢查

1.JavaScript語言弱型別的問題

如下圖所示,obj是一個空物件,沒有foo方法,立即去執行,可以提示程式碼異常,但如果不是立即執行,則不會立即報錯,也就是說如果測試
沒有測到這行程式碼,則把隱患留在了程式碼當中,如果是強型別的語言,在這裡語法上就會報錯,而不用去執行這行程式碼

如下圖所示,sum裡面的引數,從程式碼中可以看出,期望的應該是兩個數字型別相加,如果說換成一個字串,一個數字,則會打印出兩個字元拼
接這是因為型別不確定導致的.如果是強型別語言,在語法上就行不通.

三.強型別語言的優勢(以javascript作反面條件)

1.錯誤更早暴露,在上文中已經多次提到,在此不再重複。

2.程式碼智慧提示,程式碼更準確,比如下圖所示,element型別不確定,編輯器的智慧提示也不知道要提示什麼

3.重構更牢靠 比如下圖中這段程式碼,這個util方法在多處使用,現在要把aaa方法換個名字,弱型別語言只有程式碼執行到那塊才會提示

而強型別語言會直接提示,有可能造成安全隱患,比如某個地方沒有修改。

 

4.減少不必要的型別判斷,如下圖所示保證a和b是number型別的話,只能加判斷條件,才能保證,強型別語言不用加型別判斷

相關推薦

程式語言型別型別型別動態型別靜態型別

在介紹javascript型別系統之前,我們來解釋兩組區分不同程式語言時,提及的名詞分別為強型別和弱型別,靜態型別和動態型別, 分別從型別安全和型別檢查區分了強弱型別和靜動型別   一.通過型別安全區分 分為強型別和弱型別 強型別:語言層面限制了實參型別和形參型別必須相同,如果傳入其他型別的值會報錯

程式語言之間的區別

1、shell程式 windows的shell叫做cmd,它會執行.bat的batch檔案。Linux中的shell程式被稱為bash或者sh。shell程式的問題在於程式超過百行之後擴充套件性差,並且比其他語言的執行速度慢很多。 2、C和C++語言

程式語言的本質

前言 最近部落格和公眾號文章差不多有二個多月沒有更新了,相比之前每月一篇文章的更新頻率,最近確實懶散了許多,一來年底收尾之際手上的工作繁重抽不出時間,二來自己最近的空閒時間的學習計劃也排的緊密,久而久之就把寫部落格是事情落下了 但是也得益於自己之前堅持寫部落格的習慣,累積了一些讀者,我們知道人都是有惰性的

C語言中的布林(bool)型別

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C#語言中的各種數據類型與數據類型之間的轉換

優化配置 line com 歸類 浮點 初學者 結構 ali 順序 什麽是數據類型? 數據類型,百度百科是這樣解釋的:數據類型在數據結構中的定義是一個值的集合以及定義在這個值集上的一組操作。這樣的解釋對於一個初學者來說未必太過於深奧。 簡單點說,數據類型就是不同長度的數據的

編程之美讓美國人科技高速發展C語言帶給美國的變化

c99 開發者 追蹤 n) 再次 故障排查 最新 gen 內部數據   我去年7月份有幸應美國朋友的邀約,在美國眾多正在飛速發展中的高科技型企業暢遊了一番。本來我以為,美國只有Google公司,蘋果公司,FaceBook,IBM,微軟,思科這些巨型的高新技術企業在世界的新技

藍芽耳機的聽診器效應、佩戴方式、藍芽耳機型別

隨著科學技術的飛速發展,越來越多的新思維、新技術開始切切實實地影響著我們的生活。耳機領域也隨著近幾年技術的更新換代開始了一場龐大的革命即無線藍芽耳機取代有線耳機。相信大家雖然可能正在使用無線藍芽耳機但是卻對這個領域知之甚少,今天我就來簡單談談一些朋友反饋給我比較多的問題。 在聊藍芽耳機

程式設計師職業規劃來自一名8年開發經驗的程式設計師

在中國有很多人都認為IT行業是吃青春飯的,如果過了30歲就很難有機會再發展下去!其實現實並不是這樣子的,從事.NET及JAVA方面的開發的也有8年的時間了,在這裡想憑藉自己的親身經歷,與大家一起探討一下這個話題。 明確入行的目的很多人幹IT這一行都衝著“收入高”這一

程式猿簡歷的寫法你會如何寫你的簡歷呢。

引言   簡歷的重要性相信就不需要LZ來灌輸這個思想了,一份好的簡歷和一份差的簡歷,可以直接左右HR最終選擇的結果。LZ在公司雖然現在還不參與面試,但是偶爾閒的時候也會看看投遞的簡歷,看完以後也會給出

c#語言的類事件物件方法和函式的區別

在討論這些關係之前讓我們先來了解一下面向過程和麵向物件的區別: 所謂面向過程就是把一切事物或者需要解決的問題都當做是一個過程來處理,而面向物件則是把一切事物當成一個一個的物件來處理,這兩者有什麼區別呢,舉一個簡單的例子: 編寫一個駕駛汽車的程式: (1)面向過程的程式設計:

NLP系列(1)_從破譯外星人文字自然語言處理的基礎

應用 展現 發現 func 文本 詞幹 pos 中文分詞 漢語 作者:龍心塵 &&寒小陽 時間:2016年1月。 出處: http://blog.csdn.net/longxinchen_ml/article/details/505

IP地址和子網掩碼的對應關系以及2進制和10進制詳解!

2進制和10進制詳解!大家好,我是帶你們成長的凡凡~IP地址的結構: #長度為 32 bit;先 #結構 - 網絡位 + 主機位子網掩碼: -作用 區分IP地址中的網絡位與主機位 必須與IP地址,一一對應,成對出現; -表示 純2進

C語言字符串結束符'

單獨 lan 數組 targe 情況 包括 span htm ext 如果你希望你的字符串以’\0‘結束,那麽你可以這樣做: 1 char str[]={"hello"};//①字符串賦值 2 char str[]={‘h‘,‘e‘,‘l‘,

C語言中的兩種語句

我們都知道學習C語言都會遇到兩種常見的語句:選擇語句,迴圈語句。今天就讓我們一起來簡單看看這些語句的特點及功能吧! 選擇語句 if語句,用來實現兩個分支的選擇結構。 switch語句,用來實現多分支的選擇結構。 比如這裡有一個選擇語句: #include&

C語言

作為一個剛入坑學習C語言的萌新,對C語言也有了一個初步的認識。現在,筆者將分享一下學習C語言的這麼些日子裡對C語言的認識。迴圈結構,順序結構,以及選擇結構是結構化程式設計的基本結構。在我們剛剛學習C語言並用之敲程式碼的時候時常要用到這三種結構。其實對於這三種結構,書上的講述已經十分清楚了,讀者也能十

程式設計師如何正確面對壓力

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

程式的記憶體分配

ThdLee 關注 2017.04.04 20:14* 字數 1774 閱讀 202評論 0喜歡 0記憶體分配儘管現在的許多高階語言已經不需要程式設計師去直接處理

——程式設計師的自我革命

        在程式設計師這條道路上走過了十一年,即將迎來第十二個年頭。之後是否是一個新的輪迴?十一年前,從高校畢業後去哪裡是當時首要考慮的問題。早在大二第二學期時就沒有了要考研的打算,經常翹課回到宿舍鼓搗各種計算機軟體,還記得當時最感興趣的就是3DsMax和Flash了。

程式設計師的數學修養

                可能有很多朋友在網上看過Google公司早幾年的招聘廣告,它的第一題如下了:{first 10-digit prime found in consecutive digits e}.com,e中出現的連續的第一個10個數字組成的質數。據說當時這個試題在美國很多地鐵的出站口都有大

C 語言中的結構體【struct】與聯合體【union】

## C語言中結構 struct 與聯合 union 語法基本一致,如下以 struct 為例 一、struct 的基本用法 struct student {     int num;     char* sex; &nbs