我們知道JavaScript有ECMAScript离福、DOM、BOM三部分組成,下面一幅圖可以簡(jiǎn)單明了的說(shuō)明JavaScript的組成。
注:ECMAScript(European Computer Manufacturers Association)是由一種Ecma國(guó)際前身為歐洲計(jì)算機(jī)制造商協(xié)會(huì)制定的標(biāo)準(zhǔn)蝗柔。簡(jiǎn)單來(lái)說(shuō),ECMAScript不是一門(mén)語(yǔ)言民泵,而是一個(gè)標(biāo)準(zhǔn)癣丧。
ECMAScript中有5種簡(jiǎn)單數(shù)據(jù)類型,也稱為基本數(shù)據(jù)類型:Undefined栈妆、Null胁编、Boolean、String鳞尔、Number嬉橙。學(xué)習(xí)這些之前,需要先了解typeof操作符寥假。
typeof的作用是判斷給定數(shù)據(jù)的類型市框。具體用法見(jiàn)下面代碼:
//1: typeof(直接量/變量)
console.log(typeof ("哈哈哈")); // string
console.log(typeof(13)); // number
// 2: typeof 直接量/變量
console.log(typeof "你好"); // string
console.log(typeof 23); // number
一、Undefined類型
Undefined類型只有一個(gè)值undefined糕韧,如果一個(gè)變量只有聲明枫振,沒(méi)有賦值,那它的結(jié)果就是undefined萤彩,頁(yè)面上不會(huì)報(bào)錯(cuò)。
對(duì)于尚未聲明的對(duì)象雀扶,只能執(zhí)行一項(xiàng)操作杖小,即使用typeof操作符檢測(cè)其數(shù)據(jù)類型。
<script type="text/javascript">
// 如果一個(gè)變量只有聲明愚墓,沒(méi)有賦值予权,那它的結(jié)果就是undefined,頁(yè)面上不會(huì)報(bào)錯(cuò)
var a;
console.log(a); // undefined
console.log(typeof a); // undefined
var b
console.log(typeof b); // undefined
</script>
結(jié)果表明:對(duì)未初始化和未聲明的變量執(zhí)行typeof操作都返回了undefined值浪册。
二扫腺、Null類型
Null類型:空對(duì)象,也是只有一個(gè)值:null议经。從邏輯角度講斧账,null值表示一個(gè)空對(duì)象指針,而這也正是使用typeof操作符檢測(cè)其類型返回"object"的原因煞肾。undefined是派生自null咧织,所以,它們相等性測(cè)試結(jié)果返回true籍救。它有一個(gè)很常用的用處:如果定義的變量準(zhǔn)備在將來(lái)用于保存對(duì)象习绢,那么最好將該變量初始化為null。
<script>
console.log(typeof null); // object
var a = null;
if (a) {
alert("true");
} else {
alert("false");
} // 返回false
if (null == undefined) {
console.log("undefined值是派生自null")
}
</script>
三、Boolean類型
Boolean類型有兩個(gè)字面值闪萄,分別是true梧却、false。雖然它只有兩個(gè)值败去,但是任何類型都可以轉(zhuǎn)換成Boolean,數(shù)據(jù)類型及其轉(zhuǎn)換規(guī)則如下圖:
總結(jié)出來(lái)即是:除了false放航、""、NAN圆裕、0广鳍、Undefined、Null轉(zhuǎn)換為Boolean的時(shí)候結(jié)果是false吓妆,其余都是true赊时。
四、String類型
1行拢、String:即字符串祖秒,簡(jiǎn)單來(lái)說(shuō)就是用引號(hào)引起來(lái)的文本,可以是單引號(hào)舟奠,也可以是雙引號(hào)竭缝。字符串長(zhǎng)度用length表示。ECMAScript中的字符串是不可變的鸭栖,也就是說(shuō)歌馍,字符串一旦創(chuàng)建握巢,它的值就不能改變晕鹊,如果改變了字符串,編譯不會(huì)出現(xiàn)問(wèn)題暴浦,但是內(nèi)存會(huì)出現(xiàn)問(wèn)題溅话,特別影響性能。
要改變某個(gè)變量保存的字符串歌焦,首先要銷毀原來(lái)的字符串飞几,然后再用另一個(gè)包含新值的字符串填充該變量,例如:
var str = "12"; str = str + "ab";
2独撇、字符字面量:String類型包含一些特殊的字符字面量屑墨,也叫轉(zhuǎn)義字符,比如\n表示換行纷铣、\b表示退格卵史、\表示斜杠、'表示單引號(hào)搜立、''表示雙引號(hào)等以躯。如果字符串中,包含雙字節(jié)字符,length屬性可能不會(huì)精確地返回字符串中的字符數(shù)目忧设。
3刁标、如果字符串中出現(xiàn)引號(hào):
- 如果字符串中出現(xiàn)雙引號(hào),可以把字符串的引號(hào)改成單引址晕,反之膀懈,亦然
- 使用轉(zhuǎn)義符
<script>
// 括號(hào)里面直接用的數(shù)據(jù),叫做直接量
alert("123");
alert("1abv");
alert('你好');
// alert(abc); // 不是字符串,控制臺(tái)會(huì)出現(xiàn)報(bào)錯(cuò)
alert("我說(shuō):“你好”"); //不會(huì)出錯(cuò)
// alert("you say:"today is a good day""); // 會(huì)報(bào)錯(cuò)谨垃,可以改成如下
alert('you say:"today is a good day"');
alert("you say: \n \'hello\ \"world\" \b \"你好\"");
</script>
五吏砂、Number類型
1、Number類型即是數(shù)值乘客,分為浮點(diǎn)數(shù)值和整數(shù)數(shù)值狐血,這里不再做過(guò)多說(shuō)明,下面講一下數(shù)值范圍易核。
由于內(nèi)存限制匈织,ECMAScript并不能保存所有的數(shù)值類型,最小值保存在Number.MIN_VALUE,最大值保存Number_MAX_VALUE中牡直,如果超過(guò)范圍缀匕,會(huì)被自動(dòng)轉(zhuǎn)換成特殊的inFinity(正無(wú)窮)和-inFinity(負(fù)無(wú)窮)∨鲆荩可以用isFinite()函數(shù)來(lái)判斷數(shù)值是否在最大值和最小值之間乡小。
<script>
console.log(isFinite(123)); // true
var s = Number.MAX_VALUE + Number.MAX_VALUE;
console.log(isFinite(s)); // false
console.log(maxSum); // infinity(正無(wú)窮)
</script>
2、NaN
NaN(not a number)即非數(shù)值饵史,是number的一種满钟,用來(lái)表示數(shù)值的一種不正常的狀態(tài),一般情況下胳喷,會(huì)在數(shù)值計(jì)算錯(cuò)誤的時(shí)候出現(xiàn)湃番,它特殊到自己不等于自己。判斷當(dāng)前的數(shù)據(jù)是否是NaN的函數(shù)isNaN(),參數(shù)可以是任何數(shù)值吭露,該函數(shù)可以幫確定這個(gè)參數(shù)是否“不是數(shù)值”吠撮,它在接到一個(gè)參數(shù)后,會(huì)嘗試將這個(gè)值轉(zhuǎn)換為數(shù)值讲竿,泥兰,函數(shù)返回false。某些不是數(shù)值的值會(huì)直接轉(zhuǎn)換為數(shù)值题禀,而不能被轉(zhuǎn)換成數(shù)值的參數(shù)鞋诗,會(huì)導(dǎo)致這個(gè)函數(shù)返回true。
<script>
console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false(10是一個(gè)數(shù)值)
console.log(isNaN("10")); // false(可以被轉(zhuǎn)換成數(shù)值10)
console.log(isNaN(true)); // false (可以被轉(zhuǎn)換常數(shù)值1)
console.log(isNaN(false)); // false(可以被轉(zhuǎn)換成數(shù)值0)
console.log(isNaN("你好")); // true(不能被轉(zhuǎn)換成數(shù)值)
</script>
六投剥、String师脂、Number使用注意
- 如果兩個(gè)字符串用+相連,那加號(hào)的作用是連接這兩個(gè)字符串
- 如果兩個(gè)數(shù)值用+相連,那么加號(hào)的作用是兩個(gè)數(shù)值相加
- 如果加號(hào)連接的兩個(gè)直接量中有一個(gè)是字符串吃警,那么作用就是連接
<script>
console.log("我+sayHi"); // 我+nihai
console.log("我"+"sayHi"); // 我nihai
var a = 123;
var b = "123";
console.log(a + a + a + b); // string "369123"
console.log(b + a + a + a); // string "123123123123"
</script>