JavaScript 精選14堂課(二)

程式控制結構

選擇結構
如果if及else內的程式敘述只有一行,同樣可以省略大跨號{}。例如:
if (a==1) b=1; else b=2;

也可以用三運算子?來達成,三元運算子格式如下:
條件運算式? 程式敘述1 : 程式敘述2

條件運算式成立就執行敘述1,否則就執行程式敘述2。
上述程式可以改寫為:
b = (a==1 ? 1:2);
加上括號只是為了程式易讀。
重複結構

範例:

<script>
//for
for (i=1; i<=10; i++){
    console.log(i + "平方 = "+ (i*i));
}
console.log("現在 i 值 = " +i);
</script>

範例:

let fruit = ["apple", "tomato", "Strawberry"];
for (let x in fruit) {
	console.log(fruit[x]);
}

範例:

<script>
//forEach
let fruit = ["apple", "tomato", "Strawberry"];
fruit.forEach(function(x){
     console.log(x);
});

範例:

<script>
//while 
let = 1;
while(i<=10){
    console.log(i + "平方 = " + (i*i));
}
console.log("現在i值 = "+ i);
</script>
使用while loop 有兩個重點,提醒您留意:
1.必須先指定變數的起始值。
2.條件式中的變數值的增減,必須寫在while{}內,否則變數i永遠不會改變,迴圈一直執行就會造成無窮迴圈!
<script>
// do....while
let i=1;
do {
   console.log(i + "平方 = "+ (i*i));
   i++;
}while(i<=10)

console.log("現在i值 = "+ i);
</script>
break 和continue 敘述
break跟continue敘述可以用來控制迴圈流程

break敘述的作用是強迫終止迴圈的執行,跳出最靠近的迴圈,直接執行迴圈外的第一行指令。
例如:
if (i>5) break;

continue敘述的作用是馬上回到迴圈的一開始,再繼續執行迴圈。
if(i<7) continue;
<script type="text/javascript">
	for (let a=0; a<=10; a++){
		if (a===3){
			console.log(a);
			continue;
		}
		if (a===8){
			console.log(a);
			break;
		}
		console.log("for loop a="+a);
	}
 </script>

forEach 迴圈不能使用break指令中斷循環

JavaScript 精選14堂課(一)


安裝軟體Node
執行 Node 
在命令提示字元下,執行 node  檔案.js

離開 Node   
輸入 .exit   或 Ctrl+D
console.log()
console.log()
是瀏覽器的開發者工具(web developer tool)顯示括號()內的資料。只要在瀏覽器開啟檔案,按一下F12就會顯示開發者工具並印出console.log()的訊息。
變數宣告
var 宣告變數 
方法: var 變數名稱
1.全域變數
不在函數內的變數都屬於全域範圍變數,此程式文件內都可以使用此一變數。
2.區域變數
當變數在函數之內宣告,那麼只有在這一個函數區域可以使用此一變數。
let 變數宣告
方法: let 變數名稱
var變數宣告的方式,常常讓人詬病。因為關鍵字認定的作用域只有函數,但是程式中的區塊不只有函數。程式的區塊敘述是以一對大跨號{}來界定,像是if、else、for、while等控制結構或是純粹定義範圍的純區塊{}等等都是區塊。
變數 Z 沒有宣告
使用 const 關鍵字宣告常數
Const 跟 Let 關鍵字一樣都是ES6新加入的宣告方式,跟let一樣,具有區塊作用域的概念,Const是用來宣告常數(Constants),也就是不變的常量,因此常數不能重複宣告,而且必須指定初始值,之後也不能再變更它的值。
parseInt():將字串轉換為整數
a = parsInt("35"); // a = 35
b = parsInt("55.87"); // b = 55
c = parsInt("3天"); // c = 3
d = parsInt("page 2"); // d = NaN
parseFloat():將字串轉換成浮點數
a = parsFloat("35.345"); // a = 35.345
b = parsFloat("55.87"); // b = 55.87
Number():將物件或字串轉換為數值
如果物件或字串無法轉換為數值,則傳回 NaN
a = Number("10a"); // a = NaN
b = Number("11.5"); // b = 11.5
c = Number("0x11"); // c = 17
d = Number("true"); // d = 1
e = Number(new Date()); // e = 1553671784021(傳回1970/1/1至今的毫秒)
typeof:傳回資料型別
* typeof 資料
* typeof(資料)

typeof("Eileen"); // 傳回 "string"
typeof 123; // 傳回 "number"
typeof null; // 傳回 "object"
查詢物件的屬性與方法
console.log( Date.prototype)
Chrome瀏覽器中按F12,中控選項(console)

簡易的防火牆 – UFW & GUFW

從 2008 年開始 Ubuntu 8.04 LTS 多了個簡單的防火牆「UFW (Uncomplicated Firewall)」,它簡化了 iptable 複雜的指令及參數,讓人們能快速上手,之後更出現了圖形介面的 GUFW (甚至連指令都免了)。原先為了 Ubuntu 而誕生的 UFW 現在也成功移植到基於 Debian 發展的 GNU/Linux (ezgo, Linux Mint) 以及 Arch Linux。 來源

UFW
若系統尚未預載 UFW,請手動安裝

# Debian, Ubuntu
$ sudo aptitude install ufw 

# Arch Linux
$ sudo pacman -S ufw

基礎操作

狀態查詢,預設為閒置 (inactive)

$ sudo ufw status
Status: inactive

啟動 UFW 服務 (enable)

$ sudo ufw enable

預設 (default) 全部阻擋 (deny)

$ sudo ufw default deny

允許 (allow) 所有的 ssh 埠口連線

$ sudo ufw allow ssh

允許來自 127.0.0.1 (本機) 的 3389 埠口連線 (xrdp)

$ sudo ufw allow from 127.0.0.1 to any port 3389

狀態查詢,已成功啟動 (active) 並加入自訂規則

$ sudo ufw status
Status: active

To            Action    From
--            ------    ----
22            ALLOW     Anywhere
3389        ALLOW     127.0.0.1

進階使用

允許來自 192.168.1.2 上所有連線

$ sudo ufw allow from 192.168.1.2

允許來自 192.168.2.1 ~ 192.168.2.254 的所有 22 埠口連線

$ sudo ufw allow from 192.168.2.1/24 to any port 22

阻擋來自 110.88.4.5 的 22 埠口連線

$ sudo ufw deny from 110.88.4.5 to any port 22

阻擋來自 27.16.3.1 ~ 27.16.3.254 的所有連線。

$ sudo ufw deny from 27.16.3.0/24