從屌絲到架構(gòu)師的飛越(JavaScript篇)-數(shù)據(jù)類型及數(shù)據(jù)類型的轉(zhuǎn)換

一、介紹

上節(jié)課了解了JavaScript 的語句革砸,知道了JavaScript 語句就是向?yàn)g覽器發(fā)出的命令喊废,告訴瀏覽器該做什么的。那么這節(jié)課呢纺蛆,我們來了解的是JavaScript 數(shù)據(jù)類型和類型之間的轉(zhuǎn)換吐葵。那JavaScript 數(shù)據(jù)類型都有什么呢?字符串(String)桥氏、數(shù)字(Number)温峭、布爾(Boolean)、數(shù)組(Array)字支、對象(Object)凤藏、空(Null)、未定義(Undefined)

在JavaScript 中數(shù)據(jù)類型的轉(zhuǎn)換只有強(qiáng)制類型轉(zhuǎn)換和隱式類型轉(zhuǎn)換兩種方式堕伪。

二揖庄、知識(shí)點(diǎn)介紹

1、數(shù)據(jù)類型

2欠雌、typeof 操作符

3蹄梢、constructor 屬性

4、類型轉(zhuǎn)換

三富俄、上課對應(yīng)視頻的說明文檔

1禁炒、數(shù)據(jù)類型

字符串(String)、數(shù)字(Number)霍比、布爾(Boolean)幕袱、數(shù)組(Array)、對象(Object)悠瞬、空(Null)们豌、未定義(Undefined)

JavaScript 擁有動(dòng)態(tài)類型

JavaScript 擁有動(dòng)態(tài)類型。這意味著相同的變量可用作不同的類型:

實(shí)例

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

var x = 6;? ? ? ? ? // x 為數(shù)字

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

1.1JavaScript 字符串

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

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

實(shí)例

var carname="Bill Gates";

var carname='Bill Gates';

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

實(shí)例

var answer="Nice to meet you!";

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

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

1.2JavaScript 數(shù)字

JavaScript 只有一種數(shù)字類型狂打。數(shù)字可以帶小數(shù)點(diǎn)擂煞,也可以不帶:

實(shí)例

var x1=34.00;? ? ? //使用小數(shù)點(diǎn)來寫

var x2=34;? ? ? ? //不使用小數(shù)點(diǎn)來寫

極大或極小的數(shù)字可以通過科學(xué)(指數(shù))計(jì)數(shù)法來書寫:

實(shí)例

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

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

1.3JavaScript 布爾

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

var x=true

var y=false

布爾常用在條件測試中趴乡。您將在本教程稍后的章節(jié)中學(xué)到更多關(guān)于條件測試的知識(shí)对省。

1.4JavaScript 數(shù)組

下面的代碼創(chuàng)建名為 cars 的數(shù)組:

var cars=new Array();

cars[0]="Audi";

cars[1]="BMW";

cars[2]="Volvo";

或者 (condensed array):

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

或者 (literal array):

實(shí)例

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

數(shù)組下標(biāo)是基于零的蝗拿,所以第一個(gè)項(xiàng)目是 [0],第二個(gè)是 [1]蒿涎,以此類推哀托。

1.5JavaScript 對象

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

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

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

空格和折行無關(guān)緊要嗽冒。聲明可橫跨多行:

var person={

firstname : "Bill",

lastname? : "Gates",

id? ? ? ? :? 5566

};

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

實(shí)例

name=person.lastname;

name=person["lastname"];

Undefined 和 Null

Undefined 這個(gè)值表示變量不含有值。

可以通過將變量的值設(shè)置為 null 來清空變量补履。

實(shí)例

cars=null;

person=null;

聲明變量類型

當(dāng)您聲明新變量時(shí)添坊,可以使用關(guān)鍵詞 "new" 來聲明其類型:

var carname=new String;

var x=? ? ? new Number;

var y=? ? ? new Boolean;

var cars=? new Array;

var person= new Object;

JavaScript 變量均為對象。當(dāng)您聲明一個(gè)變量時(shí)箫锤,就創(chuàng)建了一個(gè)新的對象贬蛙。

2、typeof 操作符

你可以使用 typeof 操作符來查看 JavaScript 變量的數(shù)據(jù)類型谚攒。

實(shí)例

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 的數(shù)據(jù)類型是 number 非數(shù)字的特殊值

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

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

?null 的數(shù)據(jù)類型是 object

?未定義變量的數(shù)據(jù)類型為 undefined

如果對象是 JavaScript Array 或 JavaScript Date 阳准,我們就無法通過 typeof 來判斷他們的類型,因?yàn)槎际?返回 Object馏臭。

3野蝇、constructor 屬性

constructor 屬性返回所有 JavaScript 變量的構(gòu)造函數(shù)。

實(shí)例

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

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

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

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

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

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

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

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

實(shí)例

function isArray(myArray) {

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

}

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

實(shí)例

function isDate(myDate) {

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

}

4位喂、JavaScript 類型轉(zhuǎn)換

JavaScript 變量可以轉(zhuǎn)換為新變量或其他數(shù)據(jù)類型:

通過使用 JavaScript 函數(shù)

通過 JavaScript 自身自動(dòng)轉(zhuǎn)換

在js中數(shù)據(jù)類型轉(zhuǎn)換一般分為兩種浪耘,即強(qiáng)制類型轉(zhuǎn)換和隱式類型轉(zhuǎn)換(利用js弱變量類型轉(zhuǎn)換)乱灵。

4.1塑崖、將數(shù)字轉(zhuǎn)換為字符串

全局方法 String() 可以將數(shù)字轉(zhuǎn)換為字符串。

該方法可用于任何類型的數(shù)字痛倚,字母规婆,變量,表達(dá)式:

實(shí)例

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

String(123)? ? ? // 將數(shù)字 123 轉(zhuǎn)換為字符串并返回

String(100 + 23)? // 將數(shù)字表達(dá)式轉(zhuǎn)換為字符串并返回

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

實(shí)例

x.toString()

(123).toString()

(100 + 23).toString()

在 Number 方法 章節(jié)中抒蚜,你可以找到更多數(shù)字轉(zhuǎn)換為字符串的方法:

方法 描述

toExponential() 把對象的值轉(zhuǎn)換為指數(shù)計(jì)數(shù)法。

toFixed() 把數(shù)字轉(zhuǎn)換為字符串耘戚,結(jié)果的小數(shù)點(diǎn)后有指定位數(shù)的數(shù)字嗡髓。

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

4.2收津、將布爾值轉(zhuǎn)換為字符串

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

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

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

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

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

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

4.3將日期轉(zhuǎn)換為字符串

Date() 返回字符串。

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

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

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

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

實(shí)例

obj = new Date()

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

在 Date 方法 章節(jié)中,你可以查看更多關(guān)于日期轉(zhuǎn)換為字符串的函數(shù):

方法 描述

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

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

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

getHours() 返回 Date 對象的小時(shí) (0 ~ 23)肌割。

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

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

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

getSeconds() 返回 Date 對象的秒數(shù) (0 ~ 59)烦却。

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

4.4先巴、將字符串轉(zhuǎn)換為數(shù)字

全局方法 Number() 可以將字符串轉(zhuǎn)換為數(shù)字其爵。

字符串包含數(shù)字(如 "3.14") 轉(zhuǎn)換為數(shù)字 (如 3.14).

空字符串轉(zhuǎn)換為 0。

其他的字符串會(huì)轉(zhuǎn)換為 NaN (不是個(gè)數(shù)字)伸蚯。

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

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

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

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

在 Number 方法 章節(jié)中摩渺,你可以查看到更多關(guān)于字符串轉(zhuǎn)為數(shù)字的方法:

方法 描述

parseFloat() 解析一個(gè)字符串,并返回一個(gè)浮點(diǎn)數(shù)剂邮。

parseInt() 解析一個(gè)字符串摇幻,并返回一個(gè)整數(shù)。

4.5一元運(yùn)算符 +

Operator + 可用于將變量轉(zhuǎn)換為數(shù)字:

實(shí)例

var y = "5";? ? ? // y 是一個(gè)字符串

var x = + y;? ? ? // x 是一個(gè)數(shù)字

如果變量不能轉(zhuǎn)換挥萌,它仍然會(huì)是一個(gè)數(shù)字绰姻,但值為 NaN (不是一個(gè)數(shù)字):

實(shí)例

var y = "John";? // y 是一個(gè)字符串

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

4.6、將布爾值轉(zhuǎn)換為數(shù)字

全局方法 Number() 可將布爾值轉(zhuǎn)換為數(shù)字引瀑。

Number(false)? ? // 返回 0

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

4.7狂芋、將日期轉(zhuǎn)換為數(shù)字

全局方法 Number() 可將日期轉(zhuǎn)換為數(shù)字。

d = new Date();

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

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

d = new Date();

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

4.8帜矾、自動(dòng)轉(zhuǎn)換類型

當(dāng) JavaScript 嘗試操作一個(gè) "錯(cuò)誤" 的數(shù)據(jù)類型時(shí),會(huì)自動(dòng)轉(zhuǎn)換為 "正確" 的數(shù)據(jù)類型屑柔。

以下輸出結(jié)果不是你所期望的:

5 + null? ? // 返回 5? ? ? ? null 轉(zhuǎn)換為 0

"5" + null? // 返回"5null"? null 轉(zhuǎn)換為 "null"

"5" + 1? ? // 返回 "51"? ? ? 1 轉(zhuǎn)換為 "1"?

"5" - 1? ? // 返回 4? ? ? ? "5" 轉(zhuǎn)換為 5

4.9屡萤、自動(dòng)轉(zhuǎn)換為字符串

當(dāng)你嘗試輸出一個(gè)對象或一個(gè)變量時(shí) JavaScript 會(huì)自動(dòng)調(diào)用變量的 toString() 方法:

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

myVar = {name:"Fjohn"}? // toString 轉(zhuǎn)換為 "[object Object]"

myVar = [1,2,3,4]? ? ? // toString 轉(zhuǎn)換為 "1,2,3,4"

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

數(shù)字和布爾值也經(jīng)常相互轉(zhuǎn)換:

myVar = 123? ? ? ? ? ? // toString 轉(zhuǎn)換為 "123"

myVar = true? ? ? ? ? ? // toString 轉(zhuǎn)換為 "true"

myVar = false? ? ? ? ? // toString 轉(zhuǎn)換為 "false"

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

原始值????????????轉(zhuǎn)換為數(shù)字????????????轉(zhuǎn)換為字符串????????????轉(zhuǎn)換為布爾值

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、隱式類型轉(zhuǎn)換:

隱式類型轉(zhuǎn)換和java中大不相同掸宛,在js中數(shù)據(jù)類型不嚴(yán)格死陆,沒有浮點(diǎn)和整型,這里的隱式類型轉(zhuǎn)換指的是字符串和數(shù)值類型之間的轉(zhuǎn)換唧瘾,在進(jìn)行字符串和數(shù)字之間進(jìn)行減乘除取模運(yùn)算或者進(jìn)行比較運(yùn)算時(shí)措译,他會(huì)自動(dòng)把字符串轉(zhuǎn)換為數(shù)字迫像。轉(zhuǎn)換數(shù)字的默認(rèn)方法是調(diào)用Number(),進(jìn)行加法運(yùn)算則是將數(shù)字看成字符串進(jìn)行拼接. 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詭異

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瞳遍,隨后出現(xiàn)的幾起案子闻妓,更是在濱河造成了極大的恐慌,老刑警劉巖掠械,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件由缆,死亡現(xiàn)場離奇詭異,居然都是意外死亡猾蒂,警方通過查閱死者的電腦和手機(jī)均唉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肚菠,“玉大人舔箭,你說我怎么就攤上這事∥梅辏” “怎么了层扶?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烙荷。 經(jīng)常有香客問我镜会,道長,這世上最難降的妖魔是什么终抽? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任戳表,我火速辦了婚禮,結(jié)果婚禮上昼伴,老公的妹妹穿的比我還像新娘匾旭。我一直安慰自己,他們只是感情好圃郊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布价涝。 她就那樣靜靜地躺著,像睡著了一般描沟。 火紅的嫁衣襯著肌膚如雪飒泻。 梳的紋絲不亂的頭發(fā)上鞭光,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天吏廉,我揣著相機(jī)與錄音,去河邊找鬼惰许。 笑死席覆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汹买。 我是一名探鬼主播佩伤,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼聊倔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了生巡?” 一聲冷哼從身側(cè)響起耙蔑,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎孤荣,沒想到半個(gè)月后甸陌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盐股,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年钱豁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疯汁。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牲尺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幌蚊,到底是詐尸還是另有隱情谤碳,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布溢豆,位于F島的核電站估蹄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沫换。R本人自食惡果不足惜臭蚁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望讯赏。 院中可真熱鬧垮兑,春花似錦、人聲如沸漱挎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磕谅。三九已至私爷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膊夹,已是汗流浹背衬浑。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留放刨,地道東北人工秩。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親助币。 傳聞我的和親對象是個(gè)殘疾皇子浪听,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容