任務
1. 宣告變數
2. 基礎型別與物件型別
3. function
4. operator運算子
5. if判斷
6. for迴圈
1. 宣告變數
(編輯myScript.js,輸入)
var aa = 12;//宣告一個變數,名為 aa,設值為「數字12」
var bb = '13';//宣告一個變數,名為 bb,設值為「字串13」
var cc = "哈囉,世界!";//用單引號 ' 或雙引號 " 包起來的都是字串
var dd = true;//布林值 true/false
var ee;//宣告但未定義
console.log('aa='+aa);
console.log('bb='+bb);
console.log('cc='+cc);
console.log('dd='+dd);
console.log('ee='+ee);
存檔 / 更新 / 看主控台
英/數半形
開頭不可為數字
不可中文
不可符號,但可底線_
要避開保留字,ex: var, if, function, for
變數的命名應該讓人一看就懂
變數可能是一句英文
第一單字第一字母小寫,之後單字字母大寫,不留空白
var myName = 'HAHA';//我的名字 HAHA
var gameLevel = 3;//玩到第3關
var isPlayer1GoingToHome = false;//玩家1是否正在回家
var stepsPlayer1GoingToHome = 12;//玩家1回家走了幾步
好的命名讓你寫程式有效率
爛的命名讓你debug會抓狂
2. 基礎型別與物件型別
javaScript 有五種基礎型別(Primitive Type)
data type | 型別 | example |
---|---|---|
number | 數值 | 15, 17.02, -1.7e-8 |
string | 字串 | 'apple', "book", '18.3' |
boolean | 布林 | true, false |
undefined | 未定義 | var aa; |
null | 空值 | 應該用不到... |
其他都是物件型別(Object Type)
用 typeof 檢查型別
//接剛才的程式
console.log('型別aa='+typeof aa);
console.log('型別bb='+typeof bb);
console.log('型別cc='+typeof cc);
console.log('型別dd='+typeof dd);
console.log('型別ee='+typeof ee);
Crtl+S / F5 / check console
如果有時間在往下看↓
試試看,但以後不建議這樣做
//接剛才的程式
console.log(aa+aa);//數字 + 數字
console.log('aa+aa='+aa+aa);//數字 + 數字
console.log('(aa+aa)='+(aa+aa));//(數字 + 數字)
console.log('aa+bb='+aa+bb);//數字 + 文字
console.log('bb+dd='+bb+dd);//文字 + 布林
很怪吧,更怪的在下面
試試看,但以後不建議這樣做
//接剛才的程式
console.log('dd='+dd);//true
console.log('!dd='+!dd);//false
console.log('aa+dd='+aa+dd);//數字 + true = 12true
console.log('aa+!dd='+aa+!dd);//數字 + false = 12false
console.log('(aa+dd)='+(aa+dd));//(數字 + true) = 13
console.log('(aa+!dd)='+(aa+!dd));//(數字 + false) = 12
你能解釋為何會這樣嗎?
javaScript 是“弱型別”的程式語言
允許執行/運算時期強制轉型
但常常變得難以預測,應避免強制轉型
3. function
狀況:試用js解出下列問題
1. (5 + 7) x (8 + 14) = ?
2. (8 + 7) x (9 + 14) = ?
3. (62+ 7) x (53+ 14) = ?
4. (98+ 7) x (76+ 14) = ?
5. (239+7) x (756+14) = ?
有看到重複性嗎?
現在,把 +7 改成 +8,你要改幾次?
用 function 取代重複的程式
(編輯myScript.js,輸入)
function add5x2(a){
return (a+5)*2;
}
console.log(add5x2(7));//24
console.log(add5x2(8));//26
輸入引數 a,傳回 (a+5)*2
可以想像成一座工廠
function 工廠名稱 ( 輸入引數 ) {
do something;
do something;
return 傳回的值;
}
function 裡還可以有變數
//回答前面的數學題
function addAndMultiply(_a, _b){
var a1 = 7;
var a2 = 14;
var anser = (_a + a1)*(_b + a2);
return anser;
}
console.log(addAndMultiply(5 , 8));
console.log(addAndMultiply(8 , 9));
console.log(addAndMultiply(62 , 53));
console.log(addAndMultiply(98 , 76));
console.log(addAndMultiply(239 , 756));
如果要把 +7 改成 +8
只要改第 3 行就好了
var a1 = 8;
自訂好用 function
我的 myScript.js 開頭,一定是
function log(e){
console.log(e);
}
這樣,以後都不用
console.log(e);
只要
log(e);
方便多了
4. operator運算子
算術運算子,初始 y = 5
Operator | 功能 | 例子 | 最後y | 最後x |
---|---|---|---|---|
+ | 加 | x = y + 2 | y = 5 | x = 7 |
- | 減 | x = y - 2 | y = 5 | x = 3 |
* | 乘 | x = y * 2 | y = 5 | x = 10 |
/ | 除 | x = y / 2 | y = 5 | x = 2.5 |
% | 取餘數 | x = y % 2 | y = 5 | x = 1 |
設定運算子,初始 x = 10
Operator | 功能 | 例子 | 等同於 | 最後x |
---|---|---|---|---|
= | 設值 | x = 5 | x = 5 | x = 5 |
+= | 加後設值 | x += 5 | x = x + 5 | x = 15 |
-= | 減後設值 | x -= 5 | x = x - 5 | x = 5 |
*= | 乘後設值 | x *= 5 | x = x * 5 | x = 50 |
/= | 除後設值 | x /= 5 | x = x / 5 | x = 2 |
%= | 取餘數後設值 | x %= 3 | x = x % 3 | x = 1 |
比較運算子(1/3),初始 x = 5
Operator | 功能 | 例子 | 結果 |
---|---|---|---|
> | 大於 | x > 8 | false |
< | 小於 | x < 8 | true |
>= | 大於等於 | x >= 8 | false |
<= | 小於等於 | x <= 8 | false |
更多比較運算子↓
比較運算子(2/3),初始 x = 5
Operator | 功能 | 例子 | 結果 |
---|---|---|---|
== | 值相等 | x == 8 | false |
x == 5 | true | ||
x == "5" | true | ||
=== | 值相等且 型別相等 | x === 5 | true |
x === "5" | false | ||
比較運算子(3/3),初始 x = 5
Operator | 功能 | 例子 | 結果 |
---|---|---|---|
!= | 值不相等 | x != 8 | true |
x != 5 | false | ||
!== | 值不相等或 型別不相等 | x !== '5' | true |
x != '5' | false | ||
邏輯運算子,初始 x = 5
Operator | 功能 | 例子 | 結果 |
---|---|---|---|
&& | AND且 | x > 1 && x < 10 | true |
x > 1 && x < 4 | false | ||
|| | OR或 | x > 1 || x < 10 | true |
x > 1 || x < 4 | true | ||
! | NOT非 | !(x > 10) | true |
5. if 判別式
var x = 8;
if((x % 2) === 0){
//if 判別式 true,執行{裡的內容}
log('x是偶數');
}
換 x = 7 試試看
if...else...
var x = 8;
if((x % 2) === 0){
//if 判別式 true,執行
log('x是偶數');
}else{
//if 判別式 false,執行
log('x不是偶數,但也不一定是奇數');
}
換 x = 'apple' 試試看
if...else if...else
var x = 8;
if((x % 2) === 0){
//if 判別式 true,執行
log('x是偶數');
}else if((x % 2) === 1){
//第一個 if 判別式 false,這一個 if 判別式 true,執行
log('x是奇數');
}else if((typeof x) === 'string'){
log('x是文字');
}else{
log('x不是奇數,不是偶數,不是文字');
}
1.換 x = 'apple' 試試看
2.換 x = '23' 試試看???
3.換 x = true 試試看???
4.換 x = undefined 試試看
javaScript 是“弱型別”的程式語言
允許執行/運算時期強制轉型
但常常變得難以預測,應避免強制轉型
6. for 迴圈
看看這段 js 程式
console.log(1);
console.log(2);
console.log(3);
console.log(4);
console.log(5);
console.log(6);
...
console.log(100);
重複性高,有沒有更聰明的作法
for loop
for( var i = 1 ; i <= 100 ; i++ ){
console.log(i);
}
for ( 初始化 ; 判別式 ; 增加 ) {
do something;
do something;
}
選一題來做
# | 題目 | 數列和 |
---|---|---|
1. | 列出 1 ~ 500 | 125,250 |
2. | 列出 1 ~ 500 間,所有偶數 | 62,750 |
3. | 列出 1 ~ 500 間,所有7的倍數 | 17,892 |
4. | 列出 1 ~ 500 間,所有7的倍數, 但不要3的倍數 | 12,096 |
5. | 1, 2, 4, 7, 11, 16, 22, 29, 37...(50項) | 20,875 |
算算數列和
答案↓
解答
4. 列出 1 ~ 500 間,所有7的倍數,但不要3的倍數
var sum = 0;
for(var i=1 ; i<=50 ; i++){
if((i % 7) === 0){
if((i % 3) !== 0){
sum += i;
}
}
}
console.log(sum);
解答
5. 1, 2, 4, 7, 11, 16, 22, 29, 37...(50項)
var xx = 1;
var sum = 0;
for(var i=1 ; i<=50 ; i++){
console.log('第' + i + "項=" + xx);
sum += xx;
xx += i;
}
console.log("總合為=" + sum);