重學js之JavaScript基本概念(上)=> 數據類型

注意: 本文章爲 《重學js之JavaScript高級程序設計》系列第三章第一部分【數據類型】。
關於《重學js之JavaScript高級程序設計》是從新回顧js基礎的學習。

前提:任何語言的核心都會描述這門語言最基本的工做原理,一般描述的內容會涉及到這門語言的語法 、操做符、數據類型、內置功能等用於構建複雜解決方案的基本概念。

1. 語法

一、js 中的變量、函數名和操做符都區分大小寫,
二、另一些像typeof這些關鍵字也不能使用
複製代碼

2. 標識符

所謂標識符就是指變量、函數、屬性的名字,或者函數的參數。函數

標識符的寫法標準以下:

一、第一個字符必須是一個字母、下劃線或者一個美圓符號
二、其餘字符能夠是字母、下劃線、美圓符號或數字
三、標識符中的字母採用駝峯大小寫格式,例如:firstSecond、myCar
複製代碼

3. 註釋

js的註釋包括單行註釋和塊級註釋,單行註釋兩個反斜槓開頭,塊級註釋則是以(/)開始以(/)結束學習

單行註釋

// 註釋

塊級註釋

/*
    塊級註釋
*/
複製代碼

4. 語句

在js中語句是以分毫結尾可是不是必須的,可是推薦仍是寫上分號。由於這樣在壓縮代碼的時候就不會出現沒必要要的問題。測試

5. 關鍵字和保留字

在js中有一些特定的關鍵字,這些關鍵字可用於表示控制語句的開始或結束,或者用於執行特定操做等,關鍵字是語言特意保留的,因此不能用做標識符。另外在js中還有另一些保留字,也是不能用來看成標識符。spa

6. 變量

由於js的變量是鬆散類型的,鬆散類型就是能夠用來保存任何類型的數據。每一個變量僅僅是用來保存值的佔位符而已,定義變量須要用到var,在以後的ES6中增長了let和const關鍵字來定義變量。設計

var a = 10 // 定義一個變量a 給它賦值 10
複製代碼

注意:雖然省略 var 操做符能夠定義全局變量,可是並不推薦這種作法,由於在局部做用域中定義全局變量會使得代碼很難維護。指針

7. 數據類型

在js中有5種基本數據類型:Undefined、Null、Boolean、Number和String,複雜類型 Object。Object是一組由無序的名值對組成的。在ES中不支持任何建立自定義類型的機制。code

8. typeof操做符

用來檢測給定變量的數據類型,檢測的返回值以下:cdn

undefined -- 值未定義
Boolean -- 布爾值
string -- 字符串
number -- 數值
object -- 對象或者null
function -- 函數
複製代碼

typeof操做符的操做數能夠是變量,也能夠是數值字面量,typeof是一個操做符而不是函數。對象

9. undefined

它只有一個特殊類型的值即undefined,若是變量在var後沒有賦值,那麼這個變量的值就是 undefined。blog

var message;
message // undefined
複製代碼

注意:未初始化的變量和未賦值的變量 typeof以後都是undefined,因此爲了更好的判斷undefined的來源究竟是未賦值仍是未初始化,建議全部的值都聲明在使用。

10. null類型

null 是第二個只有一個值的數據類型,值爲 null,從表面看 null 表示的是一個空對象指針,而這個真是typeof 檢測 null 返回值爲 「object」的緣由。

若是你想定義一個變量用來保存對象,那麼最好的作法就是將變量賦值 null 這樣檢測 null 就知道 相應的變量是否保存了一個對象的引用。

注意:null == undefined 爲 true,儘管這樣二者的用途並不相同。不管任何狀況下都沒有必要將一個變量的值顯式的設置爲 undefined,而null則是若是保存對象的變量沒有真正保存對象,那麼就應該明確的讓變量保存null值。這樣能夠進一步的區分 null 和 undefined。

11. Boolean類型

boolean類型有兩個字面值:ture 和 false,另外這兩個值和數字值不是一回事,ture 不必定等於1,false也不必定等於0.

注意:true 和 false 是區分大小寫的,True 和 Flase 只是標識符。

咱們能夠經過函數** Boolean()** 將一個值轉換爲Boolean類型。 以下:

var message = 'haha,nihao';
var zh = Boolean(message)
複製代碼

各類類型的轉換規則以下:

數據類型 轉換爲true的值 轉換爲false的值
Boolean true false
String 任何非空字符串 "" (空字符串)
Number 任何非零數字值(包括無窮大) 0 和 NaN
Object 任何對象 null
Undefined 不適用 undefined

12. number類型

在js中普遍使用的數據類型,有整數和浮點數值。能夠經過十進制、八進制、十六進制的字面來表示。

var bjz = 070   // 八進制 56
var sjz = 56    // 十進制 56
var sljz = 0xA  // 十六進制 10
複製代碼

12.1 浮點數值

就是該數值中必須包含一個小數點,而且小數點後面至少有一位數字。

var f = 1.1
複製代碼

注意:因爲保存浮點數的內存空間是保存整數的兩倍,因此如下狀況會自動將浮點轉換爲整數保存,以下:

var f = 1.  // 小數點後沒有數字 保存爲 1
var b = 10.0 // 保存爲 10
複製代碼

另外對於 過大 或者太小的值能夠經過 e(科學計數法)表示,以下:

var f = 3.125e7   // 3.125 * 10^7 => 31250000
var f = 3e-17     // js 會將小數點後面超過6個0的浮點數值轉換爲科學計數法
複製代碼

注意:0.1 + 0.2 != 0.3

12.2 數值範圍

js中因爲內存的限制並不能保存全部的數值,js可以表示的最小值爲 5e-324,最大值爲 1.7976931348623157e + 308。若是某次計算數值超過最大 就轉換爲Infinity,最小爲 -Infinity。若是出現這兩個值,那麼該值就不能在參與以後的運算了。

12.3 NaN

js 中的非數值,是一個特殊的值。主要是爲了防止拋出錯誤,用來表示一個原本返回數值的操做數未返回數值的狀況。

NaN 有兩個特定,一、任何涉及NaN的操做都會返回NaN,二、NaN與任何值都不相等包括其自己。針對這兩個特色,ES定義了isNaN() 函數,這個函數接受一個參數,該參數能夠是任何類型,而該函數會幫咱們肯定這個參數是否 「不是數值」,isNaN()接受參數以後會嘗試將這個值轉換爲數值,某些不是數值的值會直接轉爲數值。以下:

isNaN(NaN)      // true
isNaN(10)       // false (10是一個數值)
isNaN("10")     // false (能夠被轉換成數值10)
isNaN('blue')   // true (不能轉換成數值)
isNaN(true)     // flase (能夠被轉換成數值 1)
複製代碼

注意:isNaN()也能夠用於對象,在基於對象調用的時候,首先會調用 valueOf()方法,而後肯定該方法的返回值是否能夠轉換爲數值,若是不能則基於這個返回值在調用 toString() 方法,在測試返回值。

12.4 數值轉換

有3個函數能夠把非數值轉換爲數值:Number()、parseInt()、parseFloat(),第一個函數能夠用於任何數據類型。另外兩個函數用於將字符串轉換爲數值。

Number()轉換規則以下:
    Boolean值  => true or flase => 1 or 0
    number => 傳入和返回
    null => 返回 0 
    undefined => 返回null
    字符串
        若是包含十進制數值 則 '123' => 123 ,'012' => 12
        若是是浮點字符串 則 '1.1' => 1.1 , '01.1' => 1.1
        若是包含十六進制 則 '0xf' => 相同的十進制
        若是爲空 則 '' => 0
        若是包含除了上述格式 則 '' => NaN
        若是是對象,則調用對象的 valueOf()方法,在按照以前的規則轉換返回值,
    若是轉換對象是NaN,則調用對象的 toString() 方法,在按照以前的規則返回字符串
    值。

parseInt()轉換規則以下:
    它會忽略字符串前面的空格,若是第一個字符不是數字或者負號則返回NaN。
    若是是其餘進制,則轉換爲響應的十進制數值。
    
    var n = parseInt('1234blue')    => 1234
    var m = parseInt('')            => NaN
    
parseFloat()轉換規則以下:
    從第一個字符開始解析每一個字符,知道遇到第一個無效的浮點數字字符爲止
    也就是說字符串中第一個小數點是有效的,第二個小數點就無效的了。所以
    它後面的字符串就被忽略了。
    
    var n = parseFloat('1234blue')    => 1234
    var m = parseFloat('0xA')         => 0
    var c = parseFloat('22.21.2')     => 22.21
    var b = parseFloat('22.4')        => 22.4
複製代碼

13. string類型

用於表示由零或者多個16位 Unicode字符組成的字符序列,即字符串。由雙引號("")或者單引號 ('')包裹而成

var a = '124'
var b = "123"

// 注意:雙引號開頭必須雙引號結尾!
複製代碼

13.1 字符字面量

一些特殊的字符字面量,即轉義序列。用於表示非打印字符,或者具備其餘用途的字符。

字面量 含義
\n 換行
\t 製表
\b 空格
\r 回車
\f 進紙
\ 斜槓
' 單引號
" 雙引號

這些字符能夠出如今字符串衝的任意位置,並且也會被看成一個字符來解析。

任何字符串的長度均可以經過 length 屬性來獲取。

let b = '1kljk'
b.length // 5
複製代碼

13.2 字符串的特色

在 ES 中字符串是不可變的。字符串一旦被建立,它的值將不能被改變。若是要改變某個字符串的值則須要銷燬本來的值,在從新賦值

var lang = 'shanghai'
lang = lang + 'daxue'

// shanghaidaxue
複製代碼

13.3 轉換爲字符串

若是想將一個值轉換爲字符串有兩種方法。1、經過toString(),以下:

var age = 11;
var agestring = age.toString() // '11'
var b = true
var bstring = b.toString() // 'true'
複製代碼

大多數數據類型(數值、布爾值、對象和字符串值)都有** toString**方法,可是 null 和 undefined 沒有。大多數狀況下 toString 是不須要傳遞參數的。默認是以十進制格式返回數值的字符串表示。可是實際上是能夠傳遞八進制、二進制、十六進制參數的。

var num = 10;
num.toString()      // '10'
num.toString(2)     // '1010'
num.toString(8)     // '12'
num.toString(10)    // '10'
num.toString(16)    // 'a'
複製代碼

14. object類型

對象是一組數據和功能的集合。對象能夠經過執行 new 操做符後跟要建立的對象類型的名稱來建立。建立的object類型的實例,能夠爲其添加屬性和方法。

var o = new Object()
複製代碼

在ES中 Object類型是全部它的實例的基礎,Object類型所具備的任何屬性和方法也一樣存在於更具體的對象中。

Object的每一個實例都具備下列屬性和方法:

constructor => 保存用於建立當前對象的函數

hasOwnProperty(propertyName)=> 用於檢查給定的屬性在當前對象實例中是否存在。propertyName必須以字符串形式指定。

isPrototypeOf(object) => 用於檢查傳入的對象是不是另外一個對象的原型。

propertyIsEnumerable(propertyName) => 用於檢查給的屬性是否可以使用 for-in語句來枚舉,與hasOwnProperty()方法同樣,做爲參數的屬性名必須以字符串指定。

toString() => 返回對象的字符串表示

valueOf() => 返回對象的字符串、數值或布爾值表示。·

歡迎關注個人公衆號 【小夭同窗】

相關文章
相關標籤/搜索