昨天簡單的介紹了JavaScript的歷史。今晚!我想來點變數及基本型別。沒錯!從這篇開始我們要進入 JavaScript 的基礎語法啦!
相信如果有上過國中數學課應該都對 x + 1 這樣子的運算不陌生,這個式子的 x 所代表的是一個未知的數值。這樣我們可以稱它為變數。
而在JavaScript程式中情況蠻類似的,簡單來說變數是用來存放資料,可以想像變數像是一個空的箱子或盒子,然後我們可以先將一些物品放入那個箱子中。如果還是沒有畫面,讓我們來看看下面的圖:
這個箱子就是變數,所以在 JavaScript 中我們可以這樣寫
var 箱子;
透過 var 來宣告變數箱子,接下你可能會問,為什麼要透過 var 宣告,宣告又是什麼?為什麼前面要有 var ?
原因是我們必須先告訴程式說,我們有箱子這個變數,所以前面要加上var 程式才看得懂,而這樣的行為稱作宣告,宣告的意義在於程式會幫我們預留該變數的記憶體空間。
宣告變數有一定的規則,變數必須使用字母(a-z、A-Z)、
下底線(_)、錢號($)作為開頭;後面的字員組成可以包含數字(0-9)。JavaScript 是區分大小寫(a-z)與(A-Z)不一樣。(P.S 變數名稱是可以用中文命名的,但還是盡量避免。)
而宣告變數的方式除了 var 以外,還有 let 跟還有常數 const。所以剛剛的例子可以寫成下面幾種形式
let box;
// 透過let 宣告變數 box ,但還未賦予值,目前box 是 undefinded。
let box2 = "cat"
//宣告變數box2,同時給了變數值,此時box2內容是字串"cat"。(P.S 這邊等號應該稱作指派會比等於來的精確)
const box3 = "cat"
//宣告常數 box3,同時給予值,此時box3內容是字串"cat"。
注意!常數宣告的同時,一定要給予值不然會出錯
const box3;
//Uncaught SyntaxError: Missing initializer in const declaration 。
先來簡單說明一下這三個宣告的差異。
被var 宣告過的變數依然可以再次宣告:
var box = "cat";
var box = "dog";
var box = "rabbit";
但是如果是 let 跟 const
let box = "cat";
let box = "dog";
// Uncaught SyntaxError: Identifier 'box' has already been declared
const box = "cat";
const box = "dog";
// Uncaught SyntaxError: Identifier 'box' has already been declared
會跳出錯誤告訴你變數box已經被宣告過了。
JavaScript 是弱型別的程式語言,也能說是動態的程式語言,變數裡的值才會有資料型別的資訊。舉個例:
int num = 100;
//C#的整數宣告
var num = 1;
num = "這是個字串" ; //變數 num 裡的值從數字轉換成字串
// JavaScript 你可以隨時指定不同型態的值,給同樣一個變數
資料型別主要可以分成基本型別(Primitives)與物件型別(Object)。而基本型主要有string, number, boolean, null, undefined(其實還有bigint和symbol),除了上述幾種,其他可以歸類至Object。
判斷型別的方式,我們可以使用 typeof()
typeof('') // string
typeof(5) //number
typeof(NaN) // number
typeof(true) // boolean
typeof(null) // object
typeof(undefined) // undefined
String 字串
字串會用 "" 雙引號或是 '' 單引號來包裹文字,用雙引號開頭就要雙引號結尾收合,同理單引號也是。不能夠像這樣 '"混用。
var str = "這是雙引號字串";
var str2 = "這是單引號字串";
var str3 = "這是錯誤示範'; // 不能混用喔!
有的時候在打英文我們可能會遇到打縮寫的情況,像是I'm 這樣的字,這個時候我們可這樣處理:
var str = "Hi! I'm Will" ;// 外面必須要用雙引號
如果外面硬要用單引號也是可以,但就需要透過 \ (跳脫字元,escape character)
var str = 'Hi! I\'m Will!';
然後,字串是能夠互相串接的,也能夠串接變數:
var age = 20;
var str = "Hi! I'm Alex." + "I'm " + age + " years old" ;
樣板字串(Template Strings)
從ES6開始新增了樣板字面值,它的規則是用一組 `` 做包裹
它增加字串的靈活性。
var str = `這是第一行
這是第二行
這是第三行`;
var age =20;
var str = `I am ${age} years old.`;
var apple = 10;
var orange = 15;
var string = `I spent ${apple + orange} dollers on buying fruits`;
Number 數字
根據 ECMAScript 標準,數字型別只有一種,就是數字。它包含了整數與浮點數。
var num = 15;
var num2 = 15.23;
要特別注意的是浮點數不是精確的值,所以涉及小數的比較和運算要特別小心。
0.1 + 0.2 === 0.3
// false
0.3/0.1
// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
// false
另外還有幾個特殊的數字:NaN (Not a Number)、Infinity(無限大)、 -Infinity(負無限大)
10/0
// Infinity
-20/0
// -Infinity
0/0
// NaN
NaN 非常詭異
typeof(NaN); // number
NaN === NaN // false
5 + NaN // NaN (任意數與NaN相加都會是NaN)
Boolean 布林值
boolean 有兩種:
布林值通常用在判斷式,作為控制程式流程的用途。
var a = true;
var b = false;
var c = (100 > 10); // true
Boolean() 可以用來將其他的資料型態轉型成布林值型態。
var x = 0;
Boolean(x); // false
x = 10;
Boolean(x); // true
x = "";
Boolean(x); // false
x = 'wow';
Boolean(x); // true
x = null;
Boolean(x); // false
x = undefined;
Boolean(x); // false
x = NaN;
Boolean(x); // false
在 JavaScript 當中,下列的值會被判定為false:
除此以外的值都是 true!
Null 與 Undefined
在上面的boolean 有稍微提到說, 這兩個值在轉型後都會判定為false,那他們之間是有什麼差異嗎?
null == undefined // true
null === undefined // false
以上就是關於基本的變數宣告及資料型態,若有任何建議,請各位多多指教!我們明天見!