字面量:數字和字符串
“字面量”即常量,是固定值,不可改變。看見什麼,它就是什麼。
簡單的字面量有2種:數字、字符串。
(1)數值的字面量非常簡單,寫上去就行了,不需要任何的符號。例如:
alert(886); //886是數字,所以不需要加引號。
(2)字符串的字面量也很簡單,但一定要加上引號。可以是單詞、句子等。
溫馨提示:100
是數字,"100"
是字符串。
總結
字面量都可以直接使用,但是我們一般不會直接使用字面量。
如果直接使用字面量的話,非常麻煩。比如說,多個地方要用到同一個字面量,還不如事先定義一個變量,用來保存字面量。
變量更加方便我們使用,所以在開發中都是通過變量去保存一個字面量,而不會直接使用字面量。
變量
變量的概念
變量:變量可以用來保存字面量,而且變量的值可以任意改變。
變量的定義和賦值
在js中使用var
關鍵字來聲明一個變量。
變量舉例如下:
var a = 100;
如下圖所示:
var是英語“variant”變量的縮寫。後面要加一個空格,空格後面的東西就是“變量名”:
-
定義變量:var就是一個關鍵字,用來定義變量。所謂關鍵字,就是有特殊功能的小詞語。關鍵字後面一定要有空格隔開。
-
變量的賦值:等號表示賦值,將等號右邊的值,賦給左邊的變量。
-
變量名:我們可以給變量任意的取名字。
PS:在JavaScript中,永遠都是用var來定義變量(在ES6 之前),這和C、Java等語言不同。
變量要先定義,才能使用。比如,我們不設置變量,直接輸出:
<script type="text/javascript">
console.log(a);
</script>
控制檯將會報錯:
正確寫法:
var a; // 定義
a = 100; //賦值
console.log(a); //輸出100
有經驗的程序員,會把定義和賦值寫在一起:
var a = 100; //定義,並且賦值100
console.log(a); //輸出100
變量的命名規範
變量名有命名規範:只能由英語字母、數字、下劃線、美元符號$構成,且不能以數字開頭,並且不能是JavaScript保留字。
下列的單詞,叫做保留字,就是說不允許當做變量名,不用記:
abstract、boolean、byte、char、class、const、debugger、
double、enum、export、extends、final、float、goto
implements、import、int、interface、long、native、package、
private、protected、public、short、static、super、synchronized、
throws、transient、volatile
大寫字母是可以使用的,並且大小寫敏感。也就是說A和a是兩個變量。
var A = 250; //變量1
var a = 888; //變量2
我們來整理一下變量的命名規則:
1.建議用駝峯命名規則:getElementById/matherAndFather/aaaOrBbbAndCcc
2.變量命名必須以字母或是下標符號”_”或者”$”爲開頭。
3.變量名長度不能超過255個字符。
4.變量名中不允許使用空格,首個字不能爲數字。
5.不用使用腳本語言中保留的關鍵字及保留字作爲變量名。
6.變量名區分大小寫(javascript是區分大小寫的語言)。
7.漢語可以作爲變量名。但是不建議使用,因爲 low。
標識符
標識符:在JS中所有的可以由我們自主命名的都可以稱之爲標識符。
例如:變量名、函數名、屬性名都是屬於標識符。
標識符的命名規則和變量的命令規則是一樣的。看上面一段就可以了。
重點要注意的是:標識符不能使用腳本語言中保留的關鍵字及保留字。如下。
關鍵字:
保留字:
其他不建議使用的標識符:
變量的數據類型
變量裏面能夠存儲數字、字符串等。變量會自動的根據存儲內容的類型不同,來決定自己的類型。
在JS中一共有六種數據類型:
-
基本數據類型(值類型):String 字符串、Number 數值、Boolean 布爾值、Null 空值、Undefined 未定義。
-
引用數據類型(引用類型):Object 對象。
注意:內置對象function、Array、Date、RegExp、Error等都是屬於Object類型。也就是說,除了那五種基本數據類型之外,其他的,都稱之爲 Object類型。
面試問:引用數據類型有幾種?
面試答:只有一種,即 Object 類型。
數據類型之間最大的區別:
-
基本數據類型:參數賦值的時候,傳數值。
-
引用數據類型:參數賦值的時候,傳地址(修改的同一片內存空間)。
接下來,我們詳細講一下基本數據類型。
String 字符串
來看個示例。現有如下代碼:
var a = "abcde";
var b = "生命壹號";
var c = "123123";
var d = "哈哈哈哈哈";
var e = ""; //空字符串
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(typeof e);
控制檯輸出如下:
string
string
string
string
string
注意事項:
(1)在JS中,字符串需要使用引號引起來。使用雙引號或單引號都可以,但是不要混着用。比如下面這樣寫是不可以的:
var str = `hello";
(2)引號不能嵌套:雙引號裏不能再放雙引號,單引號裏不能再放單引號。但是單引號裏可以嵌套雙引號。
(3)轉義字符:在字符串中我們可以使用\
作爲轉義字符,當表示一些特殊符號時可以使用\
進行轉義。
-
\"
表示"
-
\'
表示'
-
\n
表示換行 -
\r
表示回車 -
\t
表示製表符 -
\b
表示空格 -
\\
表示\
舉例:
var str1 = "我說:\"今天\t天氣真不錯!\"";
var str2 = "\\\\\\";
console.log(str1);
console.log(str2);
上方代碼的打印結果:
我說:"今天 天氣真不錯!"
\\\
將其他數值轉換爲字符串有三種方式:
-
拼串
-
toString()
-
String()
補充知識:typeof 運算符
typeof()
表示“獲取變量的類型”,返回的是小寫,語法爲:
typeof 變量
返回結果:
-
typeof 數值
的返回結果:number
-
typeof 字符串
的返回結果:string
-
typeof 布爾型
的返回結果:boolean
-
typeof undefined
的返回結果:undefined
-
typeof null
的返回結果:object
在JavaScript中,只要是數,就是 number
數值型的。無論整浮、浮點數(即小數)、無論大小、無論正負,都是number
類型的。
數值型:Number
在JS中所有的數值都是Number
類型,包括整數和浮點數(小數)。
var a = 100; //定義了一個變量a,並且賦值100
console.log(typeof a); //輸出a變量的類型
上方代碼的輸出結果爲:number
數值範圍:
由於內存的限制,ECMAScript 並不能保存世界上所有的數值。
-
最大值:
Number.MAX_VALUE
,這個值爲: 1.7976931348623157e+308 -
最小值:
Number.MIN_VALUE
,這個值爲: 5e-324
如果使用Number表示的變量超過了最大值,則會返回Infinity。
-
無窮大(正無窮):Infinity
-
無窮小(負無窮):-Infinity
注意:typeof Infinity
的返回結果是number
。
NaN和isNaN()函數:
(1)NaN:是一個特殊的數字,表示Not a Number,非數值。比如:
console.log("abc" / 18); //結果是NaN
console.log("abc" * "abcd"); //按理說,字符串相乘是沒有結果的,但如果你非要讓JS去算,它就一定會給你一個結果。結果是NaN
注意:typeof NaN
的返回結果是number
。
Undefined和任何數值計算的結果爲NaN。NaN 與任何值都不相等,包括 NaN 本身。
(2)isNaN() :任何不能被轉換爲數值的值,都會讓這個函數返回 true。
isNaN(NaN);// true
isNaN("blue"); // true
isNaN(123); // false
浮點數的運算:
在JS中,整數的運算基本可以保證精確;但是小數的運算,可能會得到一個不精確的結果。所以,千萬不要使用JS進行對精確度要求比較高的運算。
如下:
var a = 0.1 + 0.2;
console.log(a); //打印結果:0.30000000000000004
上方代碼中,打印結果並不是0.3,而是0.30000000000000004。
我們知道,所有的運算都要轉換成二進制去計算,然而,二進制是無法精確表示1/10的。因此存在小數的計算不精確的問題。
連字符和加號的區別
鍵盤上的+
可能是連字符,也可能是數字的加號。如下:
console.log("我" + "愛" + "你"); //連字符,把三個獨立的漢字,連接在一起了
console.log("我+愛+你"); //原樣輸出
console.log(1+2+3); //輸出6
輸出:
我愛你
我+愛+你
6
總結:如果加號兩邊都是數值,此時是加。否則,就是連字符(用來連接字符串)。
舉例1:
var a = "1";
var b = 2;
console.log(a + b);
控制檯輸出:12
舉例2:
var a = 1;
var b = 2;
console.log("a" + b); //"a"就不是變量了!所以就是"a"+2 輸出a2
控制檯輸出:a2
於是我們明白了,在變量中加入字符串進行拼接,可以被同化爲字符串。【重要】
隱式轉換
我們知道,"2"+1
得到的結果其實是字符串,但是"2"-1
得到的結果卻是數值1,這是因爲計算機自動幫我們進行了“隱式轉換”。
也就是說,-
、*
、/
、%
這幾個符號會自動進行隱式轉換。例如:
var a = "4" + 3 - 6;
console.log(a);
輸出結果:37
雖然程序可以對-
、*
、/
、%
這幾個符號自動進行“隱式轉換”;但作爲程序員,我們最好自己完成轉換,方便程序的可讀性。
布爾值:Boolean
true
和 fase
。主要用來做邏輯判斷。
布爾值直接使用就可以了,千萬不要加上引號。
代碼:
var a = true;
console.log(typeof a);
控制檯輸出結果:boolean
null和undefined
null
:空值
專門用來表示一個爲空的對象(例如:var a = null
)。注意,專門用來表示空對象。
-
Null類型的值只有一個,就是null。比如:
var a = null
。 -
使用 typeof 檢查一個null值時,會返回
object
。
undefined
:未定義
聲明了一個變量,但是沒有賦值(例如:var a;
),此時它的值就是undefined
。
-
Undefined類型的值只有一個,就是
undefind
-
使用 typeof 檢查一個undefined時,會返回
undefined
。
null
和undefined
有最大的相似性。看看null == undefined
的結果true
也就更加能說明這點。
但是null === undefined
的結果false
。它們雖然相似,但還是有區別的,其中一個區別是:和數字運算時,10 + null
結果爲:10
;10 + undefined
結果爲:NaN
。
-
任何數據類型和undefined運算都是
NaN
; -
任何值和null運算,null可看做0運算。
變量值的傳遞(賦值)
語句:
a = b;
把b的值賦給a,b不變。
將等號右邊的值,賦給左邊的變量;等號右邊的變量,值不變。
來做幾個題目。
舉例1:
//a b c
var a = 1; //1
var b = 2; //1 2
var c = 3; //1 2 3
a = b + c; //5 2 3
b = c - a; //5 -2 3
c = a * b; //5 -2 -10
console.log(a);
console.log(b);
console.log(c);
輸出:
5
-2
-10
舉例2:
//a b c
var a = 1;
var b = 2;
var c = 3; //1 2 3
a = a + b; //3 2 3
b = b + a; //3 5 3
c = c + b; //3 5 8
console.log(a); //3
console.log(b); //5
console.log(c); //8
輸出:
3
5
8
舉例3:
//a b
var a = "1";
var b = 2; //"1" 2
a = a + b; //"12" 2
b = b + a; //"12" "212"
console.log(a); //輸出12
console.log(b); //輸出212
輸出:
12
212
舉例4:
//a b
var a = "1";
var b = 2;
a = b + a; //"21" 2
b = b + a; //"21" "221"
console.log(a); //21
console.log(b) //221
效果:
21
221
舉例5:(這個例子比較特殊,字符串減去數字)
var a = "3";
var b = 2;
console.log(a-b);
效果:(注意,字符串 - 數值 = 數值)
1
var b = 2; //"1" 2
a = a + b; //"12" 2
b = b + a; //"12" "212"
console.log(a); //輸出12
console.log(b); //輸出212
輸出:
12
212
舉例4:
//a b
var a = "1";
var b = 2;
a = b + a; //"21" 2
b = b + a; //"21" "221"
console.log(a); //21
console.log(b) //221
效果:
21
221
舉例5:(這個例子比較特殊,字符串減去數字)
var a = "3";
var b = 2;
console.log(a-b);
效果:(注意,字符串 - 數值 = 數值)
1