在編程語言中有這兩種狀況之分,具體的含義爲:javascript
動態類型語言是一類在運行時能夠改變其結構的語言:例如新的函數、對象、甚至代碼能夠被引進,已有的函數能夠被刪除或是其餘結構上的變化。 --維基百科java
而靜態類型語言則與之相反,典型的動態類型語言有JavaScript
、 PHP
、 Python
、 Ruby
等。編程
在JavaScript
中共有 5 種簡單數據類型(暫不考慮 Symbol
): Undefined
、 Boolean
、 Null
、 Number
和String
,還有一種複雜的數據類型--Object
。咱們先分別看一下各自的特色。瀏覽器
Undefined
類型只有一個值,即特殊的 Undefined。當咱們使用let
聲明瞭一個變量可是並未初始化賦值,它的值就是Undefined
:編程語言
let javascript; //等價於 let javascript = undefined; 但不必這樣
javascript === undefined; //true
複製代碼
注意請與未定義分開:函數
let javascript;
console.log(javascript); //"undefined"
console.log(java); //java is not define;
複製代碼
一樣的,Null
也是隻有一個值的數據類型:null。它表示一個空的對象指針,若是咱們定義了一個變量準備未來存放對象,咱們就能夠將它初始化爲null
。ui
這種類型在大多數編程語言中都很常見,該類型有兩個值:true
和false
。請注意不要把它與數字01產生聯繫。還要注意的是他是區分大小寫的,True
並非布爾值,只是標識符。雖然字面值只有兩個,但ECMAScript
中全部類型中都有與之相對應的值,若是要將一個其餘值轉換爲布爾值,可使用Boolean
函數來轉型。spa
let item = "javascript";
let booleanitem = Boolean(item); //true
複製代碼
在JavaScript
中使用 IEEE754格式來表示整數和浮點數值。基本數字字面量有十進制整數、八進制整數和十六進制整數。在算數運算時全部八進制和十六進制都將轉換爲十進制數值。指針
數值中必須包含一個小數點,而且小數點後必須有一個數字。code
浮點數值的最高精度是17位小數,可是在算數運算中精度遠遠不如整數:
0.1 + 0.2 === 0.3; //false,舍入偏差;
console.log(0.1 + 0.2); //0.30000000000000004
複製代碼
ECMAScript
能保存的最小數值保存在Number.MIN_VALUE
中,在大多數瀏覽器中爲5e-324
;能保存的最大值保存在Number.MAX_VALUE
中,在大多數瀏覽器中爲1.7976931348623157e+308
。
若是在某次計算中超出了這一值,那麼會被轉化成Infinity
(正無窮)或者-Infinity
(負無窮),而且沒法參與下一次的計算。
NaN 即 Not a Number。這個數值用來表示一個原本要返回數值的操做數未返回數值的狀況。
它有兩個顯著的特色。 任何涉及 NaN 的操做都會返回 NaN。
console.log(NaN/100); //NaN
複製代碼
NaN 與任何值都不相等,包括它自己。
console.log(NaN === NaN); //false
複製代碼
針對這兩個特色,在ECMAScript
中定義了isNaN()
用來判斷是否爲NaN
類型。
用於表示由 0 或多個 16 位 Unicode 字符組成的字符序列,也就是字符串。 其中有一些特殊的字符字面量,也叫轉義序列,用於表示非打印字符,表示換行(\n)、製表(\t)、 空格(\b)、回車(\r)等用途。 任何字符串的長度均可以經過訪問其length
屬性得到:
let str = 'javascript';
console.log(str.lenth); //10
複製代碼
不過須要注意的是若是字符串中包含雙字節字符,返回的長度可能就不精確了:
let str = '\uD83D\uDCA9';
console.log(str.length); //2
複製代碼
字符串一旦被建立則值不可變,除非銷燬原來的字符串再用新的值填充該變量。
對象是一組數據和功能的集合。在ECMAScript
中Object
類型是全部它的實例的基礎。該類型所具備的任何屬性和方法存在於更具體的對象中。
因爲ECMAScript
鬆散的數據類型,咱們須要一種手段來隨時檢查某個變量的數據類型。typeof
操做符主要就負責這個功能:
let data1;
console.log(typeof(data1)); //'undefined'
let data2 = 'hello';
console.log(typeof(data2)); //'string'
let data3 = true;
console.log(typeof(data3)); //'boolean'
let data4 = 12;
console.log(typeof(data4)); //'number'
let data5 = function hello () {return 'world'};
console.log(data5); //'function'
let data6 = {name: 'Baoyuan'};
console.log(typeof(data6)); //'object'
let data7 = null;
console.log(typeof(data7)); //'object'
複製代碼
須要注意的是在Object
和null
類型上使用的話都返回了'object'
,這是由於特殊值null
被認爲是空的對象引用。typeof
是一個操做符而不是函數,因此括號並非必須的。它的操做數能夠是變量也能夠是數值字面量。
除了基本數據類型外在ECMAScript
中存在引用類型,包括Object
、Array
、Date
和Function
等,下一篇詳細說明。 若有錯誤歡迎聯繫我批評指正。