-
JavaScript 定義了幾種數(shù)據(jù)類(lèi)型? 哪些是簡(jiǎn)單類(lèi)型?哪些是復(fù)雜類(lèi)型?
定義了六種數(shù)據(jù)類(lèi)型:
1.)數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
2.)字符串(string):字符組成的文本(比如“Hello World”)
3.)布爾值(boolean):true
(真)和false
(假)兩個(gè)特定值
4.)undefined:表示“未定義”或不存在问裕,即使此處目前沒(méi)有任何值
5.)null: 表示空缺,即此處應(yīng)該有一個(gè)值,但目前為空
6.)對(duì)象(object):各種植組合成的集合簡(jiǎn)單類(lèi)型:number爹梁、string滓彰、boolean稳捆、undefined嗤无、null;
復(fù)雜類(lèi)型(complex type)的值猴贰,因?yàn)橐粋€(gè)對(duì)象往往是多個(gè)原始類(lèi)型的值的合成对雪,可以看作是一個(gè)存放各種值的容器:object;
-
NaN、undefined米绕、null分別代表什么?
-
NaN:Not a Number.這個(gè)數(shù)值用于本來(lái)要返回一個(gè)數(shù)值瑟捣,但是卻未能返回一個(gè)數(shù)值的情況馋艺,以防止報(bào)錯(cuò)。(即是計(jì)算發(fā)生錯(cuò)誤時(shí)的一種狀態(tài)迈套,也是number類(lèi)型的數(shù)據(jù))捐祠;
- NaN特點(diǎn):
1.)任何涉及NaN的操作都會(huì)返回NaN,(NaN報(bào)錯(cuò)桑李!)
2.)NaN對(duì)任何值都不想等踱蛀,包括自己NaN本身。針對(duì)NaN特性贵白,JS內(nèi)置了is NaN()函數(shù)率拒,來(lái)確定數(shù)值是不是NaN類(lèi)型。
3.)Number 浮點(diǎn)數(shù)值的最高精度是17位小數(shù)
4.)isNaN()來(lái)判斷這個(gè)數(shù)字是不是NaN禁荒,包含著隱式類(lèi)型轉(zhuǎn)換Number().
NaN例子:
(1)一個(gè)表達(dá)式中如果有減號(hào)(-)猬膨、乘號(hào)(*)、或除號(hào)(/)等運(yùn)算時(shí)圈浇,JS引擎會(huì)在計(jì)算之前試圖將運(yùn)算符兩邊的變量轉(zhuǎn)化為number類(lèi)型,如果轉(zhuǎn)化失敗靴寂,表達(dá)式將返回NaN磷蜀。
(2)直接使用parseInt,parseFloat或Number將一個(gè)非數(shù)字轉(zhuǎn)化為數(shù)字時(shí),表達(dá)式返回NaN: - NaN特點(diǎn):
Number('abc') //NaN
parseInt('abc') //NaN
parseFloat('abc') //NaN
(3)用isNaN()來(lái)判斷某一個(gè)變量是不是數(shù)字或能否轉(zhuǎn)化為數(shù)字:
isNaN(123) // false
isNaN("123") // false
isNaN('abc') //true
isNaN('ab3') //true
- undefined:只有一個(gè)值百炬,也就是undefined褐隆。undefined意為未定義,即當(dāng)使用var聲明了變量但未進(jìn)行賦值時(shí)剖踊,這個(gè)變量的值就是undefined庶弃。
undefined產(chǎn)生的原因有兩種:
(1)訪(fǎng)問(wèn)對(duì)象不存在的屬性或方法
(2)聲明了變量但沒(méi)有賦值
和NaN不同的是,undefined雖然也代表變量的一個(gè)狀態(tài)德澈,但這個(gè)狀 態(tài)值是確定唯一的歇攻,即當(dāng)一個(gè)變量聲明了但沒(méi)有賦值時(shí),它的狀態(tài)就是undefined梆造。
- null: 也只有一個(gè)值缴守,表示一個(gè)變量中沒(méi)有包含有效數(shù)據(jù)。null在這里意為空值镇辉、空的意思屡穗,更確切的說(shuō),一個(gè)被賦值為null的變量沒(méi)有保存有效的數(shù)值忽肛、字符串村砂、布爾、數(shù)組或?qū)ο蟮纫俟洌梢酝ㄟ^(guò)給一個(gè)變量賦值為null來(lái)清空變量中的內(nèi)容础废。產(chǎn)生null的原因只有一個(gè):即對(duì)一個(gè)變量顯示的賦值為null汛骂。
例子
和NaN來(lái)比較,null也是一個(gè)確切唯一的狀態(tài)值色迂,當(dāng)一個(gè)變量被賦值為null時(shí)香缺,那么它就和null相等。
-
typeof和instanceof的作用和區(qū)別?
- typeof是一元運(yùn)算符歇僧,返回值為字符串图张,該字符串用來(lái)說(shuō)明運(yùn)算數(shù)的數(shù)據(jù)類(lèi)型。
- 用來(lái)獲取運(yùn)算數(shù)的數(shù)據(jù)類(lèi)型诈悍。返回的值有number祸轮、boolean、undefined侥钳、function适袜、object、string舷夺。
- number:數(shù)字會(huì)返回number類(lèi)型
- boolean:boolean值只有true和false
- undefined:當(dāng)變量未被聲明時(shí)會(huì)返回undefined苦酱,這與
var name;alert(name);
是不一樣的。后者是指變量已聲明给猾,但未被初始化疫萤。 - function:當(dāng)運(yùn)算數(shù)為函數(shù)時(shí),返回function
- obeject:對(duì)象敢伸、數(shù)組扯饶、null使用typeof一律返回object。這正是typeof的局限性池颈。
** 如果我們想要獲取一個(gè)對(duì)象是否是數(shù)組尾序,或判斷某個(gè)變量是否是某個(gè)對(duì)象的實(shí)例則要選擇使用instanceof**
- instanceof用于判斷某個(gè)變量是否是某個(gè)對(duì)象的實(shí)例,返回值為true或false躯砰。
代碼題
- 完成如下代碼判斷一個(gè)變量是否是數(shù)字每币、字符串、布爾琢歇、函數(shù)
function isNumber(el){
return typeof el === "number'
}
function isString(el){
return typeof el === "string"
}
function isBoolean( el ) {
return typeof el === "boolean"
}
function isFunction( el ){
return typeof el === "function"
}
- 以下代碼的輸出結(jié)果是?
3.以下代碼的輸出結(jié)果是?
4.下面代碼的輸出是? 為什么
第一個(gè)undefined ,雖然下面已經(jīng)聲明脯爪,但還沒(méi)有賦值,所以為undefined矿微;
第二個(gè)為1痕慢,是因?yàn)橐呀?jīng)賦值
a = 1;
第三個(gè)報(bào)錯(cuò),因?yàn)閎沒(méi)有被聲明涌矢,所以報(bào)錯(cuò)掖举。
文章著作權(quán)歸饑人谷_sunny和饑人谷所有,轉(zhuǎn)載須說(shuō)明來(lái)源