JS 裏的數據類型與轉換

1、簡介

JavaScript 語言的每個值,都屬於某一種數據類型。JavaScript 的數據類型,共有七種:函數

  1. 數值(number):整數和小數(好比1和3.14)。
  2. 字符串(string):文本(好比Hello World)。
  3. 布爾值(boolean):表示真僞的兩個特殊值,即true(真)和false(假)。
  4. undefined:表示「未定義」或不存在。
  5. null:表示空值,即此處的值爲空。
  6. 對象(object):各類值組成的集合。
  7. 符號(Symbol)

其中Symbol是ES6新增的基本數據類型,本文僅介紹前六種。code


2、數據類型詳解

1. 數值(number):
1.1 整數和浮點數
JavaScript 內部,全部數字都是以64位浮點數形式儲存,即便整數也是如此。對象

1 === 1.0 // true

1.2 精度
在國際標準 IEEE 754中,JavaScript 浮點數的64個二進制位,從最左邊開始,第1位數字符號位決定了一個數的正負(0爲正數,1爲負數),第2~12位指數部分決定了數值的大小,第13~64小數部分決定了數值的精度。
1.3 數值的進制
JavaScript 對整數提供四種進制的表示方法:十進制、十六進制、八進制、二進制。ip

  • 十進制:沒有前導0的數值。
  • 八進制:有前綴0o或0O的數值。
  • 十六進制:有前綴0x或0X的數值。
  • 二進制:有前綴0b或0B的數值。

1.4 NaN
NaN意爲Not a Number,主要出如今將字符串解析成數字出錯的場合,如:字符串

618 - 'x' // NaN
NaN不等於任何值,包括它自己。:
NaN === NaN // false

2. 字符串(string):
用''或""引發來,裏面沒有包含任何內容則是空字符串,長度爲0。而裏面有空格的稱爲空格字符串,長度爲1,二者是不同的。
2.1 多行字符串
若是字符串分紅多行,能夠在每一行的尾部使用反斜槓,不加則會報錯。除了使用反斜槓外,也能夠經過鏈接運算符(+)來鏈接多個單行字符串,兩種方法所得結果一致,建議使用鏈接運算符(+)。string

var longString = 'Long \
long \
long \
string';

longString
// "Long long long string"
var longString = 'Long '
  + 'long '
  + 'long '
  + 'string';

longString
// "Long long long string"

ES6中新增反引號(`)來寫多行字符串,而這個多行字符串的length會包含回車的長度。
2.2 轉義
反斜槓()在字符串內有特殊含義,用來表示一些特殊字符,因此又稱爲轉義符。常須要用反斜槓轉義的特殊字符有:io

  • 0 :null(u0000)
  • n :換行符(u000A)
  • r :回車鍵(u000D)
  • t :製表符(u0009)
  • ' :單引號(u0027)
  • " :雙引號(u0022)
  • \ :反斜槓(u005C)

2.3 length屬性
length屬性返回字符串的長度,該屬性由字符串本省決定,沒法經過賦值改變。console


var s = 'mamamoo';
s.length // 7

s.length = 5;
s.length // 7

3. 布爾值(boolean):
布爾值只有「真」和「假」這兩個值。「真」用關鍵字true表示,「假」用關鍵字false表示。若是 JavaScript 預期某個位置應該是布爾值,會將該位置上現有的值自動轉爲布爾值。轉換規則是除了undefined、null、false、0、NaN、""或''(空字符串)六個值被轉爲false,其餘值都視爲true。function


4. undefined和null:
null與undefined均可以表示「沒有」,含義很是類似。二者的區別是:變量

  • null是一個表示「空」的對象,轉爲數值時爲0;undefined是一個表示"此處無定義"的原始值,轉爲數值時爲NaN。
  • 變量沒有值返回的是undefined。
  • 當有一個對象object但還不想賦值時推薦使用null;當有一個非對象但還不想賦值時推薦使用undefined。

5. 對象(object):
5.1 生成方法
對象簡單來講就是一組「鍵值對」(key-value)的集合,是一種無序的複合數據集合。
生成方法是用大括號把鍵值對包起來後賦值給變量,兩個鍵值對之間用逗號分隔。「:」前是鍵名,「:」後是鍵值。如:

var obj = {
  foo: 'Hello',
  bar: 'World'
};

5.2 鍵名與鍵值
對象的全部鍵名都是字符串,要加引號,不加也會自動轉爲字符串。若是鍵名不符合標識名的條件(好比第一個字符爲數字,或者含有空格或運算符),且也不是數字,則必須加上引號,不然會報錯。而鍵值是什麼類型就用該類型的格式。
5.3 屬性
對象的每個鍵名又稱爲「屬性」(property),它的「鍵值」能夠是任何數據類型。

  • 屬性的讀取

讀取對象的屬性,有兩種方法,一種是使用點運算符,還有一種是使用方括號運算符。

var obj = {
  p: 'Hello World'
};

obj.p // "Hello World"
obj['p'] // "Hello World",[]內''必定要加
  • 屬性的刪除delete(無value無key)
var obj = { p: 1 };
Object.keys(obj) // ["p"]

delete obj.p // true
obj.p // undefined
Object.keys(obj) // []
  • 屬性的查看Object.keys
var obj = {
  key1: 1,
  key2: 2
};

Object.keys(obj);
// ['key1', 'key2']
  • 屬性是否存在:in

in運算符用於檢查對象是否包含某個屬性(注意,檢查的是鍵名,不是鍵值),若是包含就返回true,不然返回false。

  • 屬性的遍歷:for...in 循環
var obj = {a: 1, b: 2, c: 3};

for (var i in obj) {
  console.log('鍵名:', i);
  console.log('鍵值:', obj[i]);
}
// 鍵名: a
// 鍵值: 1
// 鍵名: b
// 鍵值: 2
// 鍵名: c
// 鍵值: 3

3、如何知道變量類型?

使用type of可得變量的數據類型,如:

var t = 619;
type of t;//"number"

特別注意的是:

  • 當數據類型爲null時,用type of打出的數據類型倒是'object'。
  • 當定義了一個函數時,用type of打出的數據類型倒是'function'。

4、數據類型的轉換

4.1 轉爲string

  • 使用toString()
var t = 619;
t.toString();//"619"

null沒有toString這個API,不能使用toString,會報錯

var n = null;
n.toString;
//Uncaught TypeError: Cannot read property 'toString' of null

undefined也會報錯

var n = undefined;
n.toString();
//Uncaught TypeError: Cannot read property 'toString' of undefined

object使用toString會獲得"[object Object]"。

var object = {name:"po"};
object.toString()
//"[object Object]"
  • 經過與空字符串相加(+"")也能轉化爲字符串類型,且null、undefined也適用。
  • 使用window.String()
window.String(null)//"null"

爲何1 + '1' = '11'?
這是由於當兩個不一樣數據類型相加時,會優先選擇轉化爲字符串,因此1 + '1'至關於1.toString() + '1',因而結果爲兩個字符串1相加,即字符串11。
4.2 轉爲布爾

  • 使用Boolean()
Boolean(0)//false
Boolean('')//false
Boolean(' ')//true
  • 使用!!
!! ''//false
!! ' '//true

五個falsy值:0、NaN、空字符串、null、undefined
4.3 轉爲Number

  • 使用Number()

Number('1')//1

  • 使用parseInt()
//第二位參數要寫,是表示進制
  • 使用parseFloat()

parseFloat('1.23')//1.23

  • 使用 -0

'1'-0//1

  • 使用 +

+ null//0

相關文章
相關標籤/搜索