[JavaScript]簡單變數類型
所有的程式設計工作都可以歸結對「某些資料」進行「某種操作」,而變數就是代表「資料」的存在:變數是一個臨時的儲存 […]

所有的程式設計工作都可以歸結對「某些資料」進行「某種操作」,而變數就是代表「資料」的存在:變數是一個臨時的儲存容器。這裡的簡單變數指的是「一次指儲存單一的資訊片段」,包含數值、字串、布林值。 參考 MSDN 變數:https://msdn.microsoft.com/zh-tw/library/67defydd(v=vs.94).aspx
1.變數宣告
變數宣告是為了正式承認它的存在,以下為變數宣告的四個部份: var 變數名稱 =:賦值運算子 變數值 const 常數名稱 =:賦值運算子 常數值 var 用來宣告一個變數,使不使用與作用域(Scope)有關;const 用來宣告一個常數
命名規則
為了建立一變數,必須給它名稱,又稱為「識別子(Identifier)」,命名方式有:
-
開頭是字母(a-z/A-Z)、底線()、錢符號($) 其餘可包含字母(a-z/A-Z)、底線()、數值(0-9)
-
不能使用 JavaScript 保留字、空格、標點符號或其他字元,可採用獨特和描述性的名稱,避開保留字
-
通常為「駝峰式」區分大小寫
var value = 'area'; //宣告變數
const CONST = 3.14; //宣告常數
常數通常會用「全大寫字」和「底線」命名參考 MSDN JavaScript 保留字:https://msdn.microsoft.com/zh-tw/library/0779sbks(v=vs.94).aspx 參考 MSDN 為變數命名:https://msdn.microsoft.com/zh-tw/library/67defydd(v=vs.94).aspx
宣告方式
除了一般宣告之外,var 還可以一次宣告多個變數,通常合併是方便組合宣告,然而不一定要在宣告時初始化變數,有時這麼做是有意義的,可以依照不同變數需求而改變宣告方式。
var fullname = 'Domo Huang'; //一般宣告
var firstname = 'Domo', lastname = 'Huang'; //一次宣告並賦值多個變數
var a, b, c; //一次宣告多個變數,但不賦值
var rate;
rate = 5.25;
宣告型別
型別分成數值(Number)、字串(String)、布林值(Boolean)、陣列(Array)、物件(Object)五種,沒有定義就為 Undefined,因 JavaScript 是弱型別語言,所以直接賦值即可,甚至在變數相加的情況會自動轉換型別。
-
Number 不帶引號,可以是任何位數的數值,包含數字、小數點、正負數符號、字元「e」(指數記法),不包含千分位的逗號。
-
String 需包含單引號或雙引號,出現特殊字元時要在字元前面加上「\」。
-
Boolean 只有 0 和 1、true 和 false,有大小寫之分。
Number、String、Boolean,三者為簡單變數類型;Array 和 Object 則是複雜變數類型。
-
null 被定義為無值,最適合表示沒有結果的操作,例如運作時呼叫 Ajax 的結果可以是 null,說明沒有返回值。
-
undefined 指未設定值,通常是沒有操作結果,例如宣告變數時未賦值。
//直接賦值定義型別(文字語法)
var vUndefined; //沒有賦值,輸出時就為 undefined
var vNum = -1.234; //數字 Numer
var vStr = 'string'; //字串 String
var vArr = ['元素1', '元素2', '元素3']; //陣列 Array
var vObj = { firstName:"Domo", lastName:"Huang" }; //物件 Object
var bool1 = 1, bool2 = 0, bool3 = true, bool4 = false; //布林 Boolean,Boolean(值): 轉換成布林
//正式型別宣告(物件語法)
var vNum = new Number(2);
var vStr = new String('JavaScript');
var vBool = new Boolean(false);
var vArr = new Array;
var vObj = new Object;
參考 MSDN 資料型態:https://msdn.microsoft.com/zh-tw/library/7wkd9z69(v=vs.94).aspx
宣告範圍
變數分成區域變數、全域變數、常數
-
區域變數:var 宣告的變數,只有在函數執行期間(也就是呼叫函數時)有效。
-
全域變數:在函式外宣告的變數,可以在程式中任何地方使用,但避免無意使用的原因:- 應用程式應該堅守「僅完成必要得最少功能」的原則,不是絕對必要,就不需宣告為全域變數。
-
對程式性能不利,應用程式必須持續維護變數存在,甚至在不使用的情況下也是如此。
-
當全域變數與程式庫變數或其他變數同名,容易造成衝突及邏輯錯誤。
-
常數:分為開發者使用 const 宣告以及 JavaScript 內建預定的常數,作用類似全域變數,可以在任何地方使用。
※在所有函數外部宣告的變數,即使有 var 宣告,相對於函數仍有全域變數作用。 ※區域變數優先於全域變數,亦即若宣告了一個與全域變數相同名稱的區域變數,函式中的程式將會使用區域變數,而非全域變數。 ※const 關鍵字並沒有得到所有瀏覽器支援,在某些 IE 中無法辨識,不建議在 JavaScript 中建立自己的常數。
globalValue = 'globel'; //宣告全域變數
var areaValue = 'area'; //宣告區域變數
const CONST = 3.14; //宣告常數
參考 MSDN JavaScript 常數: https://msdn.microsoft.com/zh-tw/library/ff818462(v=vs.94).aspx
2.使用數值(型別:Number)
建立數值
Number 不帶引號,可以是任何位數的數值,包含數字、小數點、正負數符號、字元「e」(指數記法),不包含千分位的逗號。
var vNum = -1.234; //沒有宣告型別
var vNum = new Number(-1.234); //正式宣告型別
算術運算子
和許多語言不同,JavaScript 只有一種數值類型,用來代表從整數、雙精準度(小數或實數)到指數記法的任何數值,能安全表示高達9*1015的數值。 運算式以「先乘除後加減」為原則,請參照其他優先順序參考 MDN 網站算術運算子的優先順序。
-
Infinity: 無限值
-
NaN: 不是一個數值(Not a Number)
-
isNaN( 數值 ): 檢查是否是數值
-
isFinite( 數值 ): 檢查是否是有限數值
var row1 = 1 + 1;
var row2 = 10 - 5;
var row3 = 10 * 3;
var row4 = 12 / 3;
var row5 = 100 % 6;
var row6 = 2 / 0;
var row7 = 'letter' / 1;
row1 ++;
++ row1;
row1 --;
-- row1;
row3 *= 0.5;
row4 /= 2;
isNaN(row5)
isNaN(row6)
isNaN(row7)
isFinite(row5)
isFinite(row6)
isFinite(row7)
參考 MSDN 計算運算子:https://msdn.microsoft.com/zh-tw/library/6hsc0eak(v=vs.94).aspx 參考 MSDN 運算子優先順序:https://msdn.microsoft.com/zh-tw/library/z3ks45k7(v=vs.94).aspx
格式化數值
JavaScript 的數值不僅是一個數字,還是 Number 類型的一個物件,內建方法可使數值返回一個精確到指定小數位數的數值
-
.toFixed( 數值 n ): 限制數值顯示到小數點後 n 位數
-
.toPrecision( 數值 n ): 限制數值顯示從整數開始算到小數共 n 位數
var total = 524.1234567890;
total.toFixed(2);
total.toFixed(5);
total.toPrecision(6);
total.toPrecision(4);
total.toPrecision(2);
total.toPrecision(1);
若限制數值小於整數位數,則顯示科學符號,例如 5.2e+2 就是 5.2*102參考 MSDN Number 物件:https://msdn.microsoft.com/zh-tw/library/dwab3ed2(v=vs.94).aspx
Math 物件
Math 物件是 JavaScript 的一個全域物件,物件內有幾個預先定義的常數,如 π (圓周率 3.14)和 E (2.71),值為固定,常數名稱都大寫。 Math 常數 Math 方法
-
Math.abs( 數值 ): 取絕對值
-
Math.ceil( 數值 ): 取無條件進位後的值
-
Math.floor( 數值 ): 取無條件捨去後的值
-
Math.round( 數值 ): 取四捨五入的值
-
Math.pow( 數值 , n 次方 ): 返回值的 n 次方
-
Math.max( 數值 , 數值 , 數值 … ): 返回 0 或取數列中的最大值
-
Math.min( 數值 , 數值 , 數值 … ): 返回 0 或取數列中的最小值
-
Math.random(): 返回 0 (含)到 1 (不含)之間的隨機亂數
Math.abs(-5236);
Math.ceil(5.5146);
Math.floor(5.5146);
Math.round(5.5146);
Math.pow(2,10);
Math.max(3,4,5,4,1,8,4,5);
Math.min(3,4,5,4,1,8,4,5);
Math.random();
//試算圓的公式
var radius = 12;
var area = Math.PI * Math.pow(radius,2);
var volume = Math.PI * (4/3) * Math.pow(radius,3);
參考 MSDN Math 物件:https://msdn.microsoft.com/zh-tw/library/b272f386(v=vs.94).aspx
3.使用字串(型別:String)
建立字串
String 需包含單引號或雙引號,出現特殊字元時要在字元前面加上反斜線(\)。
var vStr = "I\'m Domo."; //沒有宣告型別
var vStr = new String('I\'m Domo.'); //正式宣告型別
字串拆分
建立字串時,僅需要在任意內容加上引號,建立完後,可以用多種方式拆解字串,常見屬性及方法如下:
-
.length: 變數的字串長度
-
.charAt( 索引值 ): 找字串中對應索引值的字元
-
.indexOf( 字元/字串 ): 找字串中第一次出現對應”字元/字串”的”索引值/起始值”,沒有則返回 -1 .indexOf( 字元/字串 , 數值 n ): 從第 n 個索引值開始找第一次出現對應的”索引值/起始值”,沒有則返回 -1
-
.lastIndexOf( 字元/字串 ): 找字串中最後一次出現對應”字元/字串”的”索引值/起始值”,沒有則返回 -1 .lastIndexOf( 字元/字串 , 數值 n ): 從 0 到第 n 個索引值中找最後一次出現對應的”索引值/起始值”,沒有則返回 -1
-
.slice( 字元 ): 以索引值為起始,往後讀取字串,若為負值就往後計算 .slice( 索引值 [from] , 索引值 [to] ): 索引值 [from] 到索引值 [to] 之間的字串
-
.split( (‘分隔元素間的文字’) ): 將字串分割,可存取成陣列來讀取
var fullName = 'Domo Huang goes to Domo Store to buy a Domo doll with Domo\'s mom';
fullName.length;
fullName.charAt(0);
fullName.charAt(4);
fullName.charAt(8);
fullName.charAt(70); //找不到返回空白
fullName.indexOf('D');
fullName.indexOf(' ');
fullName.indexOf('n');
fullName.indexOf('j'); //找不到返回-1
fullName.lastIndexOf('D');
fullName.lastIndexOf(' ');
fullName.lastIndexOf('n');
fullName.lastIndexOf('j'); //找不到返回-1
fullName.indexOf('o');
fullName.lastIndexOf('o');
fullName.indexOf('o',30);
fullName.lastIndexOf('o',30);
fullName.indexOf('Domo');
fullName.lastIndexOf('Domo');
fullName.indexOf('Domo',30);
fullName.lastIndexOf('Domo',30);
fullName.slice(32);
fullName.slice(0,4);
fullName.slice(-7); //索引值若為負,將往後循環計算
fullName.slice(2,-7); //從 2 到 -7 之間的字串
var str = 'Huang, Domo';
var strArr = str.split(','); //分隔後,存給一個陣列
參考 MSDN String:https://msdn.microsoft.com/zh-tw/library/ecczf11c(v=vs.94).aspx
字串操作
字串使用「連接」改變其值,類似字串的加法,將更多字元加到現有字串中,事實上,JavaScript 的連結運算子就是算術的加法運算子(+)。此外有可幫助字串連結的方法:
-
.trim(): 將字串前後空格去掉
-
.concat(): 也是字串相加,但較少使用,且沒有累加效果
-
.toLowerCase(): 將字串轉換為小寫
-
.toUpperCase(): 將字串轉換為大寫
var message = ' Hello, ';
message = message + 'Domo ';
message += 'Jiun! ';
message.trim();
message.concat(' How ', 'do ', 'U ', 'do?');
message.indexOf('jiun'); //如果大小寫不符會找不到!
message.toLowerCase().indexOf('jiun'); //改成都小寫,較好找到要尋找的字串
message.indexOf('DOMO');
message.toUpperCase().indexOf('DOMO');
跳脫字元
字串中有某些具有意義的轉義序列(Escape Sequences),需要在插入引號之前加上反斜線(\)。 ※注意這些轉義序列適用於單引號或雙引號,但在 PHP 等語言則不同,只能使用於雙引號內
document.write('純字元');
document.write('\'單引號\'');
document.write('\"雙引號\"');
document.write('\\反斜線\\');
document.write('換行(Enter鍵)\n我換行了!');
document.write('倒退(Backspace鍵)\b我倒退了!');
document.write('水平跳格(Tab鍵)\t我水平跳格了!');
document.write('垂直跳格(Tab鍵)\v我垂直跳格了!');
document.write('歸位\r我歸位了!');
document.write('換頁\f我換頁了!');
參考 MSDN 特殊字元:https://msdn.microsoft.com/zh-tw/library/2yfce773(v=vs.94).aspx
4.轉換型別
JavaScript 是弱型別的語言,可以一起使用不同類型的值也不會發生錯誤,例如數值與字串連接,JavaScript 會自動把數值轉換成字串,但一不小心還是會發生邏輯錯誤,因此使用強制轉換,就不擔心臭蟲(bug)發生。
轉換為數值型別
-
Number( 值 ): 將值轉為數字
-
parseInt( 值 ): 將值轉為整數 parseInt( 值 , 基數(Radix) ): 將值以基數值進制,包括 base-8(八進位)、base-10(十進位)、base-16(十六進位)轉成整數,預設是十進位
-
parseFloat( 值 ): 將值轉成浮點數
-
- 值 或 +( 值 ): 一樣將值轉為字串,這兩種方法也是轉換型別,雖一元運算子執行快速,但不如 parseInt() 和 parseFloat() 來得易讀
var date = new Date();
Number('123456');
Number('20.5678 and String!'); //字串不能直接轉成數字
Number(date); //時間會自動轉換成時間戳記
parseInt('20.5678');
parseInt('20.5678', 10); //以 10 進位成整數,預設為 10 進位
parseInt('20.5678 and String!'); //字串會以出現在開頭的數字作轉換
parseInt('20.5678 22');
parseInt(' 20.5678 '); //字串開頭的空白會被省略
parseInt('String! 20.5678'); //字串前面沒有數字,回傳 NaN
parseFloat('20.5678');
parseFloat('20.5678 and String!');
parseFloat('20.5678 22');
parseFloat(' 20.5678 ');
parseFloat('String! 20.5678');
var num = 1000, stringShip = '20', numTotal = 0, strTotal = '';
strTotal = num + stringShip;
numTotal += +stringShip;
numTotal += +(stringShip);
Number(undefined); //undefined 轉數值變 NaN
Number(null); //null 轉數值變 0
轉換為字串型別
-
String( 值 ): 將值轉為字串
-
.toString(): 直接將數值轉成字串,減少錯誤機率
var date = new Date();
var numTotal = 1000;
var stringShip = '20';
String(123456);
String('20.5678 and String!');
String(date); //時間會自動轉換成字串,跟預設值一樣
var stringMessage = '總共 $' + numTotal.toString();
轉換為布林型別
- Boolean( 值 ): 將值轉為布林值(true/false 或 1/0)
var date = new Date();
Boolean('123456'); //只要內容有正常數值或字串,皆為 true
Boolean('20.5678 and String!');
Boolean(date);
Boolean(-123);
Boolean(0);
Boolean(false);
Boolean();
Boolean(undefined);
Boolean(null) =>;
5.註解
單行註解
- //: 兩條斜線之後到該行結束前的內容就是註解
//參數設定
var n = 1;
n++; //累加
多行註解
- /* /: 「/」開頭到「*/」結尾內的內容就是註解,常用來為檔案或函數增加更詳細的說明
也可作為偵錯工具:只要將可能有問題的程式碼放在這兩個關鍵字組合之間,就能使程式碼「鈍化」,而不需要從腳本中刪除。
通常不建議在文字中加入過多註解,他應全面且準確,修改程式碼時一定要更新註解。
/*
*多行註解說明
*多行註解說明
*中間註解採用星號是慣例,但不是絕對必要
*/
/*var n = 1;
n++;*/
參考或引用資料:
事件處理:http://test.domojyun.net/MEMO/JavaScript/7_event.html
本文整理內容參考《JavaScript 設計與開發 透視新技術關鍵+完全實力養成》此書,純屬個人學習整理分享,非商業用途 本書作者:LarryUllman
以上內容純屬個人學習整理分享,學術使用,非商業用途