JavaScript的資料型別(1)

江南之一葉發表於2016-10-26

今天開始,我們分成幾個部分來詳細聊聊JavaScript的資料型別----那些讓初學者混淆和崩潰的事兒。 (小步快跑,每天不寫多了,個人認為短平快的技術文章讓初學者更容易懂)

很多書上寫著:JavaScript是一種無型別的語言。這句話貌似對的,但實際上對初學者有著巨大的誤導!

漢語裡的『無』一般是沒有的意思,因此初學者以為JS中『沒有』資料型別,或者說資料型別不重要,殊不知JS中有資料型別,而且在程式設計中資料型別重要得很,你想避也避不開。而且,JS中偏偏對同一個變數可以賦予不同的資料型別,靈活得要命。試看下面程式碼:

var a=100; //此時a為number型別

a=true; //此時a為boolean型別

a="Hello,JavaScript!"; //此時a為string型別

a={}; //此時a為object型別

a=function(){} //此時a為function型別,也是屬於物件型別

以上都不會報錯,因此有不少初學者認為,JS中資料型別不那麼重要,隨便怎麼寫都行,坑來了。。。

先來談談JS中資料型別的分類,按全球JS頂尖專家Nicholas Zakas的說法,JS中資料型別分成兩大類:原始型別和引用型別:

(1)原始型別中的布林型別(計算機中最基本的不是0和1嗎?我們們就從布林型別開聊)
布林型別,它只有2個值:真值true,假值false. 看似很簡單,但別忘了,其它型別是可以轉換成布林型別的。轉換規則如下:

A.正零、負零、浮點零(0.0)、空字串、false本身、NaN、null、undefined 被轉換為假值(false)
B. 其它值被轉換為真值(true), 特別是物件---哪怕是空物件,也會被轉換成真值true
C. 如果x是要轉換成布林型別的值,就呼叫Boolean(x),(看清楚:前面沒有那個new , 不是new
Boolean(x), 這個話題很大,我們們後面仔細再說!)你也可以寫成:!!x 即可。

因此,嚴格講,你只能說,JS是一種弱型別的語言,不能說它是無型別的語言。 (不是我偏要咬文嚼字,搞技術工作實在是馬虎不得!記得嗎?小學時語文老師教導我們:語文學不好,其它科目會受影響,真的如此,誠不我欺也!)

相關文章