基本數(shù)據(jù)類
1.變量
變量都是用來存儲數(shù)據(jù)的容器,在使用變量時(shí)又分以下兩個(gè)步驟:
聲明變量
初始化變量
var a;//聲明一個(gè)變量
var b = 10;//聲明的同時(shí)并給這個(gè)變量初始化
當(dāng)變量第一次賦值時(shí),我們稱之為變量初始化
不同的寫法
var a = 1;//聲明的同時(shí)初始化
var b,c,d = 'hello',v1 = 32,v2;
var v1,
v2,
v3 = 'hello',
v4 = 42,
v5;
變量名可以由字母、數(shù)字、下劃線及美元符號組合而成。但不能以數(shù)字開頭,像下面這樣是不被允許的
var 2three4five;
區(qū)分大小寫
var casematters = 'lower';
var CASE_MATTERS = 'upper';
console.log(casematters);//lower
console.log(CASE_MATTERS);//upper
2.操作符
所謂操作符,通常指的是能對一兩個(gè)輸入執(zhí)行某種操作,并返回結(jié)果的符號
1 + 2;//3
//變量的例子
var a = 1;
var b = 2;
a + 1;//2
操作符有:+、—、、/、%、++、——*
復(fù)合操作符:+=、-=、=、/=、%=*
3.基本數(shù)據(jù)類型
JavaScript僅有以下幾大基本數(shù)據(jù)類型
數(shù)字—包括浮點(diǎn)數(shù)與整數(shù),例如這些都屬于數(shù)字:1、100、3.14。
字符串—包括由任意數(shù)量字符組成的序列,例如:"a"、"one"、"one 2 three"。
布爾值—包括true和false。
undefined—當(dāng)我們試圖訪問一個(gè)不存在的變量時(shí),就會得到一個(gè)特殊值:undefinedJavaScript會自動將變量在初始化之前的值設(shè)定為undefined。
null—這是另一種只包含一個(gè)值的特殊數(shù)據(jù)類型。通常是指沒有值或空值,不代表任何東西。null與undefined最大的不同在于,被賦予null的變量通常被認(rèn)為是已經(jīng)定義了的,只不過它不代表任何東西。
任何不屬于上述五種基本類型的值都會被認(rèn)為是一個(gè)對象。
4.查看類型操作符—typeof
該操作符會返回一個(gè)代表數(shù)據(jù)類型的字符串,以下是其可能返回的結(jié)果:
"number";
"string";
"boolean";
"undefined";
"object";
"function"。
5.數(shù)字
> var n = 1;
> typeof n;
"number"
> n = 1234;
> typeof n;
"number"
浮點(diǎn)數(shù)(即含小數(shù)部分的數(shù)字)顯然也是Number類型的一種:
> var n2 = 1.23;
> typeof n2;
"number"
> typeof 123;
"number"
- 指數(shù)表示法
> 1e1;
10
> 1e+1;
10
> 2e+3;
2000
> typeof 2e+3;
"number"
一個(gè)數(shù)字可以表示成1e1(或者1e+1、1E1、1E+1)這樣的指數(shù)形式,意思是在數(shù)字1后面加1個(gè)0,也就是10。同理,2e+3的意思是在數(shù)字2后面加3個(gè)0,也就是2000。
- Infinity
在JavaScript中,還有一種叫做Infinity的特殊值。它所代表的是超出了JavaScript處理范圍的數(shù)值。但I(xiàn)nfinity依然是一個(gè)數(shù)字
//JavaScript所能處理的最大值是1.7976931348623157e+308,而最小值為5e-324
> Infinity;
Infinity
> typeof Infinity;
"number"
> 1e309;
Infinity
> 1e308;
1e+308
//另外,任何數(shù)除以0結(jié)果也為Infinity:
> var a = 6 / 0;
> a;
Infinity
Infinity相加,我們也不會得到0,而是會得到一個(gè)叫做NaN(Not A Number的縮寫,即不是數(shù)字)
的東西。
> Infinity - Infinity;
NaN
> -Infinity + Infinity;
NaN
另外,Infinity與其他任何操作數(shù)執(zhí)行任何算術(shù)運(yùn)算的結(jié)果也都等于Infinity。
> Infinity - 20;
Infinity
> -Infinity*3;
-Infinity
> Infinity / 2;
Infinity
> Infinity – 99999999999999999;
Infinity
- NaN
NaN 盡管該值的名字叫做“不是數(shù)字”,但事實(shí)上它依然屬于數(shù)字類型,只不過是一種特殊的數(shù)字罷了。
> typeof NaN;
"number"
> var a = NaN;
> a;
NaN
數(shù)字10與字符"f"相乘時(shí),結(jié)果就會為NaN,因?yàn)?f"顯然是不支持乘法運(yùn)算的
> var a = 10*"f";
> a;
NaN
而且NaN是有傳染性的,只要我們的算術(shù)運(yùn)算中存在一個(gè)NaN,整個(gè)運(yùn)算就會失敗
> 1 + 2 + NaN;
NaN
6.字符串
在JavaScript中,一對雙引號或單引號之間的任何值都會被視為一個(gè)字符串。也就是說,如果說1是一個(gè)數(shù)字的話,那么"1"就是一個(gè)字符串了,在一個(gè)字符串前使用typeof操作符會返回"string"
> var s = "some characters";
> typeof s;
"string"
//字符串中可以包含數(shù)字,例如:
> var s = '1';
> typeof s;
"string"
//如果引號之間沒有任何東西,它所表示的依然是一個(gè)字符串(即空字符串):
> var s = ""; typeof s;
"string"
- 字符串拼接
var s1 = "web";
var s2 = "site";
var s = s1 + s2;
s;
"website"
- 字符串轉(zhuǎn)換
當(dāng)我們將一個(gè)數(shù)字字符串用于算術(shù)運(yùn)算中的操作數(shù)時(shí),該字符串會在運(yùn)算中被當(dāng)做數(shù)字類型來使用。(由于加法操作符的歧義性,這條規(guī)則不適用于加法運(yùn)算。)
> var s = '1';
> s = 3*s;
> typeof s;
"number"
> s;
3
> var s = '1';
> s++;
> typeof s;
"number"
> s;
2
如果轉(zhuǎn)換操作失敗了,我們就會得到一個(gè)NaN值。
var movie = '101 dalmatians';
movie*1;
NaN
- 特殊字符串
\ 轉(zhuǎn)義字符
\n 換行符
\r 回車符
\t 制表符
\u Unicode編碼
7.布爾值
布爾類型中只有兩種值:true和false。它們使用時(shí)不需加引號。
> var b = true;
> typeof b;
"boolean"
> var b = false;
> typeof b;
"boolean"
//如果true或false在引號內(nèi),它就是一個(gè)字符串。
> var b = "true";
> typeof b;
"string"
- 邏輯運(yùn)算符
JavaScript中有三種邏輯運(yùn)算符
!—邏輯非(取反)
&&—邏輯與
||—邏輯或
如果我們對一個(gè)非布爾值執(zhí)行邏輯運(yùn)算,那么該值就會在計(jì)算過程中被轉(zhuǎn)換為布爾值:
var b = "one";
!b;
false
上例中的字符串"one"是先被轉(zhuǎn)換為布爾值true然后再取反的,結(jié)果為false。如果我們對它取反兩次,結(jié)果就會為true。
借助雙重取反操作,可以很輕易地將任何值轉(zhuǎn)換為相應(yīng)的布爾值.除了下面所列出特定值以外(它們將被轉(zhuǎn)換為false),其余大部分值在轉(zhuǎn)換為布爾值時(shí)都為true。
空字符串""
null
undefined
數(shù)字0
數(shù)字NaN
布爾值false
這6個(gè)值有時(shí)候也會稱為falsy值,而其他則被稱為truthy值(包括字符串“0”,“ ”,“false”等)
短路&&、||
&& 兩邊表達(dá)式都為true時(shí),結(jié)果才為true
|| 兩邊表達(dá)式一方為ture時(shí),結(jié)果才為true
- 操作符優(yōu)先級
!的優(yōu)先級最高,因此在沒有括號限定的情況下它將會被最先執(zhí)行。接下來的優(yōu)先順序是&&,最后才是||。
> false && false || true && true;
true
//與下面表達(dá)式等效:
> (false && false) || (true && true);
true
注意事項(xiàng)
- 即如果變量mynumber已經(jīng)被定義了,就保留其原有值,否則就將它初始化為10。
> var mynumber = mynumber || 10;
> mynumber;
10
這種做法簡單而優(yōu)雅,但是請注意,這也不是絕對安全的。如果這里的mynumber之前被初始化為0(或者是那6個(gè)falsy值中的任何一個(gè)),這段代碼就不太可能如我們所愿了。
> var mynumber = 0;
> var mynumber = mynumber || 10;
> mynumber;
10
- 比較運(yùn)算符
== 相等運(yùn)算符
-
=== 嚴(yán)格相等運(yùn)算符:兩個(gè)操作數(shù)的值和類型都回
true
!= 不相等運(yùn)算符
!== 嚴(yán)格不相等運(yùn)算符:此操作內(nèi)不允許類型轉(zhuǎn)換。且當(dāng)兩個(gè)操作數(shù)的值或類型不相等時(shí)返回true
">="
<
<=
NaN不等于任何東西,包括它自己
NaN == NaN;
false
8.undefined與null
當(dāng)我們嘗試使用一個(gè)不存在的變量時(shí),控制臺中就會產(chǎn)生以下錯(cuò)誤信息:
> foo;
ReferenceError: foo is not defined
但當(dāng)對不存在的變量使用typeof操作符時(shí)則不會出現(xiàn)這樣的錯(cuò)誤,而是會返回一個(gè)字符串"undefined"
> typeof foo;
"undefined"
如果我們在聲明一個(gè)變量時(shí)沒有對其進(jìn)行賦值,調(diào)用該變量時(shí)并不會出錯(cuò),但typeof操作符依然會返回"undefined":
> var somevar;
> somevar;
> typeof somevar;
"undefined"
//這是因?yàn)楫?dāng)我們聲明而不初始化一個(gè)變量時(shí),JavaScript會自動使用undefined值來初始化這個(gè)變量。
但null值就完全是另一回事了。它不能由JavaScript自動賦值,只能交由我們的代碼來完成。
> var somevar = null;
null
> somevar;
null
> typeof somevar;
"object"
盡管undefined和null之間的差別微乎其微,但有時(shí)候也很重要。例如,當(dāng)我們對其分別執(zhí)行某種算術(shù)運(yùn)算時(shí),結(jié)果就會截然不同:
> var i = 1 + undefined;
> i;
NaN
> var i = 1 + null;
> i;
1
//這是因?yàn)閚ull和undefined在被轉(zhuǎn)換為其他基本類型時(shí),方法存在一定的區(qū)別
下面我們給出一些可能的轉(zhuǎn)換類型。
- 轉(zhuǎn)換成數(shù)字
> 1*undefined;
NaN
> 1*null;
0
- 轉(zhuǎn)換成布爾值
> !!undefined;
false
> !!null;
false
- 轉(zhuǎn)換成字符串
> "value: " + null;
"value: null"
> "value: " + undefined;
"value: undefined"
基本數(shù)據(jù)類型綜述
JavaScript語言中有五大基本數(shù)據(jù)類型:
數(shù)字
字符串
布爾值
undefined
null
任何不屬于基本類型的東西都屬于對象
數(shù)字類型可以存儲的數(shù)據(jù)包括:正負(fù)整數(shù)、浮點(diǎn)數(shù)、十六進(jìn)制數(shù)與八進(jìn)制數(shù)、指數(shù)以及特殊數(shù)值NaN、Infinity、-Infinity。
字符串類型存儲的是一對引號之間的所有字符。
布爾類型的值只有兩個(gè):true和false。
null類型的值只有一個(gè):null。
undefined類型的值只有一個(gè):undefined。
絕大部分值在轉(zhuǎn)換為布爾類型時(shí)都為true,但以下6種falsy值除外
""
null
undefined
0
NaN
false
數(shù)組
數(shù)組是一個(gè)用于存儲數(shù)據(jù)的列表。與一次只能存儲一個(gè)數(shù)據(jù)的變量不同,我們可以用數(shù)組來存儲任意數(shù)量的元素值。
1.數(shù)組創(chuàng)建方式
> var a = [];//聲明一個(gè)空數(shù)組變量
> var a = [1,2,3];//定義一個(gè)帶三個(gè)元素的數(shù)組
同一數(shù)組中是以0下標(biāo)去查找對應(yīng)的值,如果訪問不存在的下標(biāo),則會返回undefined值
> var arr= [1,2,3,4,5];
> arr[6];
"undefined"
//只要在控制臺中輸入相應(yīng)的數(shù)組名,就能打印出該數(shù)組中的所有內(nèi)容:
> var arr= [1,2,3,4,5];
> arr;
Array(5) [ 1, 2, 3, 4, 5 ]
增加、更新數(shù)組元素
通過索引來更新數(shù)組中的元素,如果新元素被添加的位置與原數(shù)組末端之間存在一定間隔,則新元素與該數(shù)組末端之間的值為undefined
//通過下標(biāo)賦值
> a[2] = 'three';
"three"
> a;
[1, 2,"three"]
//另外,我們也可以通過索引一個(gè)之前不存在的位置,來為其添加更多的數(shù)組元素
> a[3] = 'four';
"four"
> a;
[1, 2,"three","four"]
//新元素被添加的位置與原數(shù)組末端之間存在一定間隔,則新元素與該數(shù)組末端之間的值為undefined
> var a = [1,2,3];
> a[6] = 'new';
"new"
> a;
[1, 2, 3, undefined x 3,"new"]
刪除元素
為了刪除特定的元素,我們需要用到delete操作符,然而,相關(guān)元素被刪除后,原數(shù)組的長度并不會受到影響。從某種意義上來說,該元素被刪除的位置只是被留空了而已
> var a = [1, 2, 3];
> delete a[1];
true
> a;
[1, undefined, 3]
> typeof a[1];
"undefined"
數(shù)組的數(shù)組
我們可以在數(shù)組中存放任何類型的值,當(dāng)然也包括另一個(gè)數(shù)組。
> var a = [1, "two", false, null, undefined];
> a;
[1, "two", false, null, undefined]
> a[5] = [1,2,3];
[1, 2, 3]
> a;
[1, "two", false, null, undefined, Array[3]]
值得注意的是,我們也可以通過這種數(shù)組訪問方式來獲取字符串中特定位置上的字符
> var s = 'one';
> s[0];
"o"
> s[1];
"n"
> s[2];
"e"
小結(jié)
數(shù)組是一種數(shù)據(jù)存儲形式
數(shù)組元素是可以被索引的
數(shù)組中的元素索引是從0開始的,并且按照每個(gè)元素的位置依次遞增
我們是通過方括號中的索引值來訪問數(shù)組元素的
數(shù)組能存儲任何類型的數(shù)據(jù),包括另一個(gè)數(shù)組
條件與循環(huán)
if條件表達(dá)式
var result = '',a = 3;
if (a > 2) {
result = 'a is greater than 2';
}
//if-else
if (a > 2) {
result = 'a is greater than 2';
} else {
result = 'a is NOT greater than 2';
}
檢測變量是否存在
> var result = '';
> if (somevar){
result = 'yes';
}
ReferenceError: somevar is not defined
> result;
""
它也可以是任何一種被初始化為falsy值(如false或0)的已聲明變量。所以在檢查變量是否存在時(shí),更好的選擇是使用typeof。
> var result = "";
> if (typeof somevar !== "undefined"){
result = 'yes';
}
> result;
""
替代if表達(dá)式
//if-else
var a = 1;
var result = '';
if (a === 1) {
result ="a is one";
} else {
result ="a is not one";
}
//使用三目運(yùn)算簡化
> var a = 1;
> var result = (a === 1) ?"a is one" : "a is not one";
//這種語法通常只用于一些非常簡單的條件邏輯,千萬不要濫用。因?yàn)檫@樣做很容易使我們的代碼變得難以理解
switch語句
當(dāng)我們發(fā)現(xiàn)自己在if表達(dá)式中使用了太多的else if子句時(shí),就應(yīng)該要考慮用switch語句來替代if了
var a = '1';
var result = '';
switch (a) {
case 1:result = 'Number 1';break;
case '1':result = 'String 1';break;
default:result = 'I don\'t know';break;
}
盡量使用default語句。因?yàn)檫@可以使我們在switch找不到任何匹配的情況下,也依然能返回一些有意義的結(jié)果。
while & do-while
while循環(huán)是最為簡單的一種循環(huán),它們通常是這樣的:
var i = 0;
while (i < 10) {
i++;
}
do-while循環(huán)實(shí)際上是while循環(huán)的一種輕微的變種。示例如下:
var i = 0;
do {
i++;
} while (i < 10);
for & for-in
for是使用得最為廣泛的循環(huán)類型
//方式一
var punishment = '';
for (var i = 0; i < 100; i++) {
punishment += 'I will never do this again, ';
}
//方式二
for (var i = 0, punishment = ''; i < 100; i++) {
punishment += 'I will never do this again, ';
}
for循環(huán)還可以彼此嵌套
var res = '\n';
for(var i = 0; i < 10; i++) {
for(var j = 0; j < 10; j++) {
res += '*';
}
res+= '\n';
}
//最終,該字符串輸出如下:
"
**********
**********
**********
**********
**********
**********
**********
**********
**********
**********
"
for-in循環(huán)
for-in循環(huán)往往被用來遍歷某個(gè)數(shù)組
var a = [ 'a', 'b', 'c', 'x', 'y', 'z'];
var result = '\n';
for (var i in a) {
result += 'index: ' + i + ', value: ' + a[i] + '\n';
}
//結(jié)果如下:
"
index: 0, value: a
index: 1, value: b
index: 2, value: c
index: 3, value: x
index: 4, value: y
index: 5, value: z
"
JavaScript注解
單行注釋—以//開頭并直至該行結(jié)束。
多行注釋—以/開頭,并以/結(jié)尾,其中可以包括一行或多行內(nèi)容
//具體示例如下:
// beginning of line
var a = 1; // anywhere on the line
/*multi-line comment on a single line*/
/*
comment that spans several lines
*/
本章小結(jié)
幾種基本數(shù)據(jù)類型
數(shù)字
字符串
布爾值
undefined
null
基本的操作符
算術(shù)運(yùn)算符:+、-、*、/、%
自增(減)運(yùn)算符:++、--
賦值運(yùn)算符:=、+=、-=、*=、/=、%=
特殊操作符:typeof、delete
邏輯運(yùn)算符:&&、||、!
比較運(yùn)算符:==、===、!=、!==、<、>、>=、<=
三元運(yùn)算符:?:
通過數(shù)組來存儲和訪問數(shù)據(jù)
條件執(zhí)行語句
if-else
switch
循環(huán)語句
while
do-while
for
for-in