從屌絲到架構師的飛越(JavaScript篇)-數據類型及數據類型的轉換

一、介紹

上節課了解了JavaScript 的語句,知道了JavaScript 語句就是向瀏覽器發出的命令,告訴瀏覽器該做什么的。那么這節課呢,我們來了解的是JavaScript 數據類型和類型之間的轉換。那JavaScript 數據類型都有什么呢?字符串(String)、數字(Number)、布爾(Boolean)、數組(Array)、對象(Object)、空(Null)、未定義(Undefined)

在JavaScript 中數據類型的轉換只有強制類型轉換和隱式類型轉換兩種方式。

二、知識點介紹

1、數據類型

2、typeof 操作符

3、constructor 屬性

4、類型轉換

三、上課對應視頻的說明文檔

1、數據類型

字符串(String)、數字(Number)、布爾(Boolean)、數組(Array)、對象(Object)、空(Null)、未定義(Undefined)

JavaScript 擁有動態類型

JavaScript 擁有動態類型。這意味著相同的變量可用作不同的類型:

實例

var x? ? ? ? ? ? ? ? // x 為 undefined

var x = 6;? ? ? ? ? // x 為數字

var x = "Bill";? ? ? // x 為字符串

1.1JavaScript 字符串

字符串是存儲字符(比如 "Bill Gates")的變量。

字符串可以是引號中的任意文本。您可以使用單引號或雙引號:

實例

var carname="Bill Gates";

var carname='Bill Gates';

您可以在字符串中使用引號,只要不匹配包圍字符串的引號即可:

實例

var answer="Nice to meet you!";

var answer="He is called 'Bill'";

var answer='He is called "Bill"';

1.2JavaScript 數字

JavaScript 只有一種數字類型。數字可以帶小數點,也可以不帶:

實例

var x1=34.00;? ? ? //使用小數點來寫

var x2=34;? ? ? ? //不使用小數點來寫

極大或極小的數字可以通過科學(指數)計數法來書寫:

實例

var y=123e5;? ? ? // 12300000

var z=123e-5;? ? // 0.00123

1.3JavaScript 布爾

布爾(邏輯)只能有兩個值:true 或 false。

var x=true

var y=false

布爾常用在條件測試中。您將在本教程稍后的章節中學到更多關于條件測試的知識。

1.4JavaScript 數組

下面的代碼創建名為 cars 的數組:

var cars=new Array();

cars[0]="Audi";

cars[1]="BMW";

cars[2]="Volvo";

或者 (condensed array):

var cars=new Array("Audi","BMW","Volvo");

或者 (literal array):

實例

var cars=["Audi","BMW","Volvo"];

數組下標是基于零的,所以第一個項目是 [0],第二個是 [1],以此類推。

1.5JavaScript 對象

對象由花括號分隔。在括號內部,對象的屬性以名稱和值對的形式 (name : value) 來定義。屬性由逗號分隔:

var person={firstname:"Bill", lastname:"Gates", id:5566};

上面例子中的對象 (person) 有三個屬性:firstname、lastname 以及 id。

空格和折行無關緊要。聲明可橫跨多行:

var person={

firstname : "Bill",

lastname? : "Gates",

id? ? ? ? :? 5566

};

對象屬性有兩種尋址方式:

實例

name=person.lastname;

name=person["lastname"];

Undefined 和 Null

Undefined 這個值表示變量不含有值。

可以通過將變量的值設置為 null 來清空變量。

實例

cars=null;

person=null;

聲明變量類型

當您聲明新變量時,可以使用關鍵詞 "new" 來聲明其類型:

var carname=new String;

var x=? ? ? new Number;

var y=? ? ? new Boolean;

var cars=? new Array;

var person= new Object;

JavaScript 變量均為對象。當您聲明一個變量時,就創建了一個新的對象。

2、typeof 操作符

你可以使用 typeof 操作符來查看 JavaScript 變量的數據類型。

實例

typeof "John"? ? ? ? ? ? ? // 返回 string

typeof 3.14? ? ? ? ? ? ? ? // 返回 number

typeof NaN? ? ? ? ? ? ? ? // 返回 number

typeof false? ? ? ? ? ? ? ? // 返回 boolean

typeof [1,2,3,4]? ? ? ? ? ? ? // 返回 object

typeof {name:'John', age:34} // 返回 object

typeof new Date()? ? ? ? ? ? // 返回 object

typeof function () {}? ? ? ? // 返回 function

typeof myCar? ? ? ? // 返回 undefined (如果 myCar 沒有聲明)

typeof null? ? ? ? ? ? ? ? // 返回 object

請注意:

?NaN 的數據類型是 number 非數字的特殊值

?數組(Array)的數據類型是 object

?日期(Date)的數據類型為 object

?null 的數據類型是 object

?未定義變量的數據類型為 undefined

如果對象是 JavaScript Array 或 JavaScript Date ,我們就無法通過 typeof 來判斷他們的類型,因為都是 返回 Object。

3、constructor 屬性

constructor 屬性返回所有 JavaScript 變量的構造函數。

實例

"John".constructor? ? ? ? ? ? ? ? // 返回函數 String()? { [native code] }

(3.14).constructor? ? ? ? ? ? ? ? // 返回函數 Number()? { [native code] }

false.constructor? ? ? ? ? ? ? ? ? // 返回函數 Boolean() { [native code] }

[1,2,3,4].constructor? ? ? ? ? ? ? // 返回函數 Array()? { [native code] }

{name:'John', age:34}.constructor? // 返回函數 Object()? { [native code] }

new Date().constructor? ? ? ? ? ? // 返回函數 Date()? ? { [native code] }

function () {}.constructor? ? ? ? // 返回函數 Function(){ [native code] }

你可以使用 constructor 屬性來查看對象是否為數組 (包含字符串 "Array"):

實例

function isArray(myArray) {

return myArray.constructor.toString().indexOf("Array") > -1;

}

你可以使用 constructor 屬性來查看對象是否為日期 (包含字符串 "Date"):

實例

function isDate(myDate) {

return myDate.constructor.toString().indexOf("Date") > -1;

}

4、JavaScript 類型轉換

JavaScript 變量可以轉換為新變量或其他數據類型:

通過使用 JavaScript 函數

通過 JavaScript 自身自動轉換

在js中數據類型轉換一般分為兩種,即強制類型轉換和隱式類型轉換(利用js弱變量類型轉換)。

4.1、將數字轉換為字符串

全局方法 String() 可以將數字轉換為字符串。

該方法可用于任何類型的數字,字母,變量,表達式:

實例

String(x)? ? ? ? // 將變量 x 轉換為字符串并返回

String(123)? ? ? // 將數字 123 轉換為字符串并返回

String(100 + 23)? // 將數字表達式轉換為字符串并返回

Number 方法 toString() 也是有同樣的效果。

實例

x.toString()

(123).toString()

(100 + 23).toString()

在 Number 方法 章節中,你可以找到更多數字轉換為字符串的方法:

方法 描述

toExponential() 把對象的值轉換為指數計數法。

toFixed() 把數字轉換為字符串,結果的小數點后有指定位數的數字。

toPrecision() 把數字格式化為指定的長度。

4.2、將布爾值轉換為字符串

全局方法 String() 可以將布爾值轉換為字符串。

String(false)? ? ? ? // 返回 "false"

String(true)? ? ? ? // 返回 "true"

Boolean 方法 toString() 也有相同的效果。

false.toString()? ? // 返回 "false"

true.toString()? ? ? // 返回 "true"

4.3將日期轉換為字符串

Date() 返回字符串。

Date()? ? ? // 返回 Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)

全局方法 String()? 可以將日期對象轉換為字符串。

String(new Date())? // 返回 Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)

Date 方法 toString() 也有相同的效果。

實例

obj = new Date()

obj.toString()? // 返回 Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)

在 Date 方法 章節中,你可以查看更多關于日期轉換為字符串的函數:

方法 描述

getDate() 從 Date 對象返回一個月中的某一天 (1 ~ 31)。

getDay() 從 Date 對象返回一周中的某一天 (0 ~ 6)。

getFullYear() 從 Date 對象以四位數字返回年份。

getHours() 返回 Date 對象的小時 (0 ~ 23)。

getMilliseconds() 返回 Date 對象的毫秒(0 ~ 999)。

getMinutes() 返回 Date 對象的分鐘 (0 ~ 59)。

getMonth() 從 Date 對象返回月份 (0 ~ 11)。

getSeconds() 返回 Date 對象的秒數 (0 ~ 59)。

getTime() 返回 1970 年 1 月 1 日至今的毫秒數。

4.4、將字符串轉換為數字

全局方法 Number() 可以將字符串轉換為數字。

字符串包含數字(如 "3.14") 轉換為數字 (如 3.14).

空字符串轉換為 0。

其他的字符串會轉換為 NaN (不是個數字)。

Number("3.14")? ? // 返回 3.14

Number(" ")? ? ? // 返回 0

Number("")? ? ? ? // 返回 0

Number("99 88")? // 返回 NaN

在 Number 方法 章節中,你可以查看到更多關于字符串轉為數字的方法:

方法 描述

parseFloat() 解析一個字符串,并返回一個浮點數。

parseInt() 解析一個字符串,并返回一個整數。

4.5一元運算符 +

Operator + 可用于將變量轉換為數字:

實例

var y = "5";? ? ? // y 是一個字符串

var x = + y;? ? ? // x 是一個數字

如果變量不能轉換,它仍然會是一個數字,但值為 NaN (不是一個數字):

實例

var y = "John";? // y 是一個字符串

var x = + y;? ? ? // x 是一個數字 (NaN)

4.6、將布爾值轉換為數字

全局方法 Number() 可將布爾值轉換為數字。

Number(false)? ? // 返回 0

Number(true)? ? ? // 返回 1

4.7、將日期轉換為數字

全局方法 Number() 可將日期轉換為數字。

d = new Date();

Number(d)? ? ? ? ? // 返回 1404568027739

日期方法 getTime() 也有相同的效果。

d = new Date();

d.getTime()? ? ? ? // 返回 1404568027739

4.8、自動轉換類型

當 JavaScript 嘗試操作一個 "錯誤" 的數據類型時,會自動轉換為 "正確" 的數據類型。

以下輸出結果不是你所期望的:

5 + null? ? // 返回 5? ? ? ? null 轉換為 0

"5" + null? // 返回"5null"? null 轉換為 "null"

"5" + 1? ? // 返回 "51"? ? ? 1 轉換為 "1"?

"5" - 1? ? // 返回 4? ? ? ? "5" 轉換為 5

4.9、自動轉換為字符串

當你嘗試輸出一個對象或一個變量時 JavaScript 會自動調用變量的 toString() 方法:

document.getElementById("demo").innerHTML = myVar;

myVar = {name:"Fjohn"}? // toString 轉換為 "[object Object]"

myVar = [1,2,3,4]? ? ? // toString 轉換為 "1,2,3,4"

myVar = new Date()? ? ? // toString 轉換為 "Fri Jul 18 2014 09:08:55 GMT+0200"

數字和布爾值也經常相互轉換:

myVar = 123? ? ? ? ? ? // toString 轉換為 "123"

myVar = true? ? ? ? ? ? // toString 轉換為 "true"

myVar = false? ? ? ? ? // toString 轉換為 "false"

下表展示了使用不同的數值轉換為數字(Number), 字符串(String), 布爾值(Boolean):

原始值????????????轉換為數字????????????轉換為字符串????????????轉換為布爾值

false? ? ? ? ? ? ? ? 0 ???????????????????????????? "false" ???????????????????? false

true ????????????????1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"true"? ? ? ? ? ? ? ? ? ? ? ?true

0 ???????????????????? 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"0" ???????????????????????? false

1? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "1" ???????????????????????? true

"0"???????????????????? 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"0" ???????????????????????? true

"000"???????????????? 0???????????????????????????? "000"? ? ? ? ? ? ? ? ? ? ? ? true

"1" ???????????????????? 1 ???????????????????????????? "1"? ? ? ? ? ? ? ? ? ? ? ? ? true

NaN ???????????????? NaN ???????????????????????? "NaN" ???????????????????? false

Infinity???????????? Infinity ????????????????????"Infinity" ????????????????????true

-Infinity ????????????-Infinity ????????????????"-Infinity"? ? ? ? ? ? ? ? ? ? ?true

"" ???????????????????? 0???????????????????????????? ""???????????????????????????? false

"20" ????????????????20 ???????????????????????????? "20"? ? ? ? ? ? ? ? ? ? ? ? true

"Runoob"???????? NaN ???????????????????????? "Runoob"? ? ? ? ? ? ? ? true

[ ] ???????????????????? 0 ???????????????????????????? ""???????????????????????????? true

[20]???????????????? 20 ???????????????????????????? "20"???????????????????????? true

[10,20] ????????????NaN ???????????????????????? "10,20"???????????????????? true

["Runoob"]???????? NaN???????????????????????? "Runoob" ????????????????true

["Runoob","Google"]? NaN???????????????? "Runoob,Google" ????true

function(){} ????????NaN???????????????????????? "function(){}" ????????????true

{ } ????????????????????NaN???????????????????????????? "[object Object]"? ? ?true

null ????????????????0???????????????????????????????? "null"? ? ? ? ? ? ? ? ? ? ? ? ? false

undefined ????????NaN ???????????????????????? "undefined"? ? ? ? ? ? ? ?false

4.10、隱式類型轉換:

隱式類型轉換和java中大不相同,在js中數據類型不嚴格,沒有浮點和整型,這里的隱式類型轉換指的是字符串和數值類型之間的轉換,在進行字符串和數字之間進行減乘除取模運算或者進行比較運算時,他會自動把字符串轉換為數字。轉換數字的默認方法是調用Number(),進行加法運算則是將數字看成字符串進行拼接. var x = "123";

var y = 121;

alert(x+y);//"123121;

alert(x-y);//2

alert(x*y);//14883

alert(x/y);//1.016528256198346

alert(x%y);//2

alert(x>y);//true

alert(x==y);//false

alert("123a">y);//false詭異

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,412評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,514評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,373評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,975評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,743評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,199評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,262評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,414評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,951評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,780評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,527評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,218評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,649評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,889評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,673評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容