計算機顧名思義就是能夠作數學計算的機器,所以,計算機程序理所固然地能夠處理各類數值。可是,計算機能處理的遠不止數值,還能夠處理文本、圖形、音頻、視頻、網頁等各類各樣的數據,不一樣的數據,須要定義不一樣的數據類型。在JavaScript中定義瞭如下幾種數據類型:java
JavaScript不區分整數和浮點數,統一用Number表示,如下都是合法的Number類型:web
字符串是以單引號'或雙引號"括起來的任意文本數組
用true、false表示布爾值,也能夠經過布爾運算計算出來:函數
數組是一組按順序排列的集合,集合的每一個值稱爲元素。JavaScript的數組能夠包括任意數據類型。例如:學習
var arr = [1, 2, 3.14, 'Hello', null, true];
數組用[]表示,元素之間用,分隔。數組的元素能夠經過索引來訪問。請注意,索引的起始值爲0.spa
arr[0]; // 返回索引爲0的元素,即1設計
JavaScript的對象是一組由鍵-值組成的無序集合,例如:調試
var person = { name: 'Bob', age: 20, tags: ['js', 'web', 'mobile'], city: 'Beijing', hasCar: true, zipcode: null };
要獲取一個對象的屬性,咱們用對象變量.屬性名的方式:code
person.name; // 'Bob'
null表示一個「空」的值,它和0以及空字符串''不一樣,0是一個數值,''表示長度爲0的字符串,而null表示「空」。JavaScript的設計者但願用null表示一個空的值,而undefined表示值未定義。事實證實,這並無什麼卵用,區分二者的意義不大。大多數狀況下,咱們都應該用null。undefined僅僅在判斷函數參數是否傳遞的狀況下有用。視頻
當咱們對Number作比較時,能夠經過比較運算符獲得一個布爾值
==比較,它會自動轉換數據類型再比較,不少時候,會獲得很是詭異的結果
===比較,它不會自動轉換數據類型,若是數據類型不一致,返回false,若是一致,再比較
惟一能判斷NaN的方法是經過isNaN()函數
最後要注意浮點數的相等比較:
1 / 3 === (1 - 2 / 3); // false
這不是JavaScript的設計缺陷。浮點數在運算過程當中會產生偏差,由於計算機沒法精確表示無限循環小數。要比較兩個 浮點數是否相等,只能計算它們之差的絕對值,看是否小於某個閾值:
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
變量的概念基本上和初中代數的方程變量是一致的,只是在計算機程序中,變量不只能夠是數字,還能夠是任意數據 類型。 變量在JavaScript中就是用一個變量名錶示,變量名是大小寫英文、數字、$和_的組合,且不能用數字開頭。變量名也 不能是JavaScript的關鍵字,如if、while等。
申明一個變量用var語句,好比:
var a; // 申明瞭變量a,此時a的值爲undefined
javaScript在設計之初,爲了方便初學者學習,並不強制要求用var申明變量。這個設計錯誤帶來了嚴重的後果:若是一個變量沒有經過var申明就被使用,那麼該變量就自動被申明爲全局變量.在同一個頁面的不一樣的JavaScript文件中,若是都不用var申明,剛好都使用了變量i,將形成變量i互相影響,產生難以 調試的錯誤結果。 使用var申明的變量則不是全局變量,它的範圍被限制在該變量被申明的函數體內(函數的概念將稍後講解),同名變 量在不一樣的函數體內互不衝突。
爲了修補JavaScript這一嚴重設計缺陷,ECMA在後續規範中推出了strict模式,在strict模式下運行的JavaScript代碼,強制 經過var申明變量,未使用var申明變量就使用的,將致使運行錯誤。
啓用strict模式的方法是在JavaScript代碼的第一行寫上: 'use strict';