一、介紹
上節(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詭異