變數:
變數的意義:就是用來表示一個資料的代號-我們自己定義的一個名字。
變項的定義:var v1; var v2 = 2; var v3, v4, v5; var v6, v7=7, v8, v9=”abc”;
變數的使用:
賦值:v1 = 1; v1 = 1+2+3; v1 = v2 + 「abc」; v1 = v1 + 5; v1 = v1 + v1;
取值:m1 = v1; //將v1的值取到,再賦值給m1
地
alert( v1 ); //將v1的值取到,並交給alert去「彈出」
以「輸出」為「輸出」為「輸出」
alert( “v1=” + v1);
document.write( “v1=” + v1);
資料型態:
基本型態:
布林 式: boolean; 此型態只有兩個數值可用: true, false
字串型態:為 string; 可用單引號或雙引號表示,且意義相同;
數位型態: number
複合型:
陣列: Array,
物件: Object
特殊型態:
‧
undefined: 未定義:此類型通常以對應「根本尚未給予價值」此狀態。
算術運算子: + - * / %
重點:
1, 除法(/)是數學上的自然除,而不是C語言的除法意義。
2, ++ 和 -- 稱為一元運算符,即只針對一個變數進行運算
3, 但++ 和– 可以在表達式(例如賦值語句)中使用,則類似同時進行了2件事:自加(或自減)和表達式本身的計算,此時他們放在變量的前面和後面有不同意義。
a) var i = 1; var s1 = i++; //結果為:s1為1,且為2
b) var i = 1; var s2 = ++i;
比較運算子:> >=
比較運算子用於資料的大小比較,通常為數字。其中值得注意的是:
==稱為“模糊相等”,即資料的內容或經過轉換後的內容相等,就認為是相等。
===稱為“嚴格相等”,而只有在資料的類型和資料的內容都相等的時候才算相等。
-以電腦的角度來說,且有兩個面向:資料型別與資料值(資料內容)
邏輯運算子:只用於對bool值進行運算。
邏輯與( && ):兩個資料只有都是true的時候,結果才是true
邏輯或( || ):兩個資料只要有一個是true,結果就是true
邏輯非( ! ):取得一個bool值的「相反值」
字串運算子:
只有一個連接運算子( + ): 意思是「連接兩個字串」
辨別算術運算子的加法( + ):
且有一個加號( + )兩個的資料只要有一個是字串,則都會依字串的「連結」意義進行運算,而另一個若不是於字串。
位運算子:
位元運算子只針對數字的二進位形式進行。
var v1 = 5; //這是10進制,二元其實是:101,在電腦內部其實類似這樣: 00000101
var v2 = 6; //這是10進制,而二元其實是:110,在電腦內部其實類似這樣: 00000110
按位與:
符號: &
意義:將兩個二進制數字的對應位上的數字進行“與運算”,結果還是這些位運算的結果組成的二進制數所代表的值。
解釋:以二元數字進行「與運算」的規則是:
1 & 1 è 1
1 & 0 è 0
0 & 1 è 0
0 & 0 è 0
舉例:
var v1 = 5, v2 = 6,運算圖示為:
v1=5
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
1
|
v2=6
|
0
|
0
|
0
|
0
|
0
|
1
|
1
|
0
|
v1 & v2
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
0
|
var v3 = v1 & v2 = 00000100(2) = 4(10)
按位或:
符號: |
意義:將兩個二進制數字的對應位上的數字進行“或運算”,結果是這些位運算的結果組成的二進制數所代表的值。
解釋:二進位數字進行「或運算」的規則是:
1 | 1 è 1
1 | 0 è 1
0 | 1 è 1
0 | 0 è 0
按位非:
符號: ~ //這是一個「單目運算子」
意義:將一個二進制數字的對應位上的數字進行“非運算”,結果是這些二進制數字所代表的值。
解釋:二進位數字進行「非運算」的規則是:
~1 è 0
~0 è 1
按位左移運算:
符號:
意義: 將一個二進制數的每一個位上的數字往左邊移動指定的位數,並且左邊“冒”出去的就不管了(不算了),右邊空出來的位上填入“0”,得到的結果就是該二進制數字所代表的值。
舉例:
var v1 = 5;var v2 = 5
v1=5
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
1
|
v2= 5
|
0
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
var v2 = 5
按位左移運算:
符號: >>
意義: 將一個二進制數的每一個位上的數字往右邊移動指定的位數,並且右邊「冒」出去的就不管了(不算了),左邊空出來的位上填入原來的左邊的數字,得到的結果就是該二進制數字所代表的值。
舉例:
var v1 = 5;var v2 = 5 >> 2;
v1=5
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
1
|
v2= 5 >> 2
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
var v2 = 5 >> 2 = 00000001(2) = 1(10)
運算符其他內容:
賦值運算子:其實就基本的賦值運算子: = ,其意義是將等號右邊的資料放到等號左邊的變數中。
錯誤的語法:
var v1 = 1, v2 = 2, v3 = 5, v4 = -2;
v1 + v2 = v3 + v4; //錯誤,且大錯,且大錯特錯
複合賦值運算子: += -= *= /= %=
運算子的優先順序 —— 太多,較為複雜,記不住,但請記住幾條規則:
1, 要心如明鏡:運算子有優先權(先後順序)問題。
2, 括號最優先,等號(賦值)最落後。
3, 先乘除後加減
4, 想不清楚或用不明白的,使用括號來解決
5, 括號只有小括號,可以一層層嵌套。
舉例:
var year = 2013;
//判斷閏年:一個年份能被4整除並且不能被100整除是閏年,或者能被400整除,也是閏年。
if ( ( (year % 4 == 0) && (year % 100 != 0) ) || (year== 000 == 0)
{ documment.write( year + 「是閏年」) ;}
資料的傳值方式:
var v1 = 10;
var v2 = v1; //將v1中值拷貝一份,且放到v2這個變數中去了-此時也可以說成「將v1的值傳給v2」
var v1 = v1 + v1; //v1的值改變了,但不影響v2-因為v2本身也是獨立的變數。
document.write("
v1=" + v1); //20
document.write("
v2=" + v2); //10, 不會,40,
上述「v2 = v1」就稱為「拷貝傳值」-取得v1的值並拷貝一份,然後賦值給v2
var v3 = {name:"小花", age:18, edu:"大學" }; //這是一個所謂「物件」類型-其中包含了3個資料。
//操作其中的數據類似:
document.write("
v3這個物件的年齡為:" + v3.age);
v3.age = 19; //v3這個物件的age這項資料的值重複賦了一個新值,類似前面v1 = 20;
var v4 = v3; //此時,且將v3這個變數的「記憶體位址」傳遞給v4這個變量,而v3這個物件的資料本身其實只是由該位址來取得。 ——這就叫做引用傳值——此時,其實這兩個變數是一樣的資料內容,類似一個人的多個名字:真名,藝名,網名,小名
document.write("
v4這個物件的年齡為:" + v4.age);
v3.age = 20; //
document.write("
此時,v4這個物件的年齡為:" + v4.age);
總結:
在js中,基本資料型別使用 「拷貝傳值」-傳值的時候直接就出現了一份新的資料(當然同時也是另一個變數所代表)
複合資料型態(陣列與物件)使用「引用傳值」-傳值的時候只是做了一個位址指向,資料仍然只有一份,兩個變數就指向這同一份資料。
if分支結構:
控制結構:就是使用一定的語法來控制我們程式執行的流程-也可以叫「流程控制結構」
分支就是「多條路徑,走一條」。
最簡形式:
//如果此條件滿足(即條件判斷的結果是true),則會執行其中的語句區塊,否則什麼都不做。
if( 條件判斷語句 )
{
//要執行的語句區塊-語句區塊其實就是一種表示「n條語句」泛泛說法。
}
二選一分支形式:意義是兩條路,必走一條。
if( 條件判斷語句 )
{
//要執行的語句區塊1-前面條件成立時執行
}
else
{
//要執行的語句區塊2-前面條件不成立時執行
}
多選一分支結構:多條路依照條件的滿足情況走其中一條,但也可能一條都不走:
if( 條件判斷1 ) //若有條件滿足,而執行語句區塊1,然後if就結束了
{
//語句區塊1
}
else if ( 條件判斷2 ) //若條件1不滿足,則判斷條件2:若滿足,則執行語句區塊2,並結束if
{
//語句區塊2
}
else if ( 條件判斷3 ) //若條件2不滿足,則判斷條件3:若滿足,則執行語句區塊3,並結束if
{
//語句區塊3
}
…………………… //依此類推。 。 。 。 。 。如果沒有一個條件滿足,其實到最後什麼也不會執行,if結束。
綜合型式:
if( 條件判斷1 ) //若有條件滿足,而執行語句區塊1,然後if就結束了
{
//語句區塊1
}
else if ( 條件判斷2 ) //若條件1不滿足,則判斷條件2:若滿足,則執行語句區塊2,並結束if
{
//語句區塊2
}
else if ( 條件判斷3 ) //若條件2不滿足,則判斷條件3:若滿足,則執行語句區塊3,並結束if
{
//語句區塊3
}
……………. 。 。 。 。 。
else
{
//最後的else語句塊。 //此語句區塊會在前面條件都不滿足的時候去執行。
}
注意:綜合型式中是必有一條分支(語句區塊)會被執行。
switch分支結構:
switch的分支結構整體意義跟if類似,也是表示“多條路走一條”,其使用形式:
switch ( 一個變數或表達式 ) //不管是變數或表達式,並為最終代表一個「值」,我們用v1說話
{
case 固定值1: //如果v1等於值1,則執行語句區塊1
//則以1;
break; 地
case 固定值2: 若v1不等於前值1,則繼續判斷是否等於這裡的數值2,若相等,執行語句2
//則以2;
break; 地
case ………………………………
。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
default:
ault語句塊可以沒有。
//預設語句區塊
}
特別注意:if語句其實是可以用非常彈性的條件判斷,例如 > >=
while循環結構:
循環的基本觀念:
1, 迴圈就是讓某些程式(語句區塊)重複執行
2, 循環必須能夠有辦法停止-電腦沒有自己的判斷能力去決定「累了,不做了」
while循環的基本語法形式:
while ( 條件判斷 ) //若條件判斷滿足了,且會執行其中的語句區塊,否則while結束。
{
//要執行的語句區塊
} //如果此語句區塊執行了,會立即回到前方while的位置繼續判斷。
上述形式只是文法上的基本要求,但,在「實用」中,通常會需要遵照以下模式:
【循環變數初始化】
while ( 【循環變數作為條件判斷】 )
{
//循環體,是重複執行的語句區塊
【循環變數值的改變】
}
do while循環結構:
do while循環是一種會先執行一次,然後再根據判斷條件來決定是否繼續執行並循環的一種循環結構。
do while的實用形式如下:
【循環變數初始化】
do
{
//循環體,是重複執行的語句區塊
【循環變數值的改變】
} while ( 【循環變數作為條件判斷】 ) ;
描述: 先執行do後面打括號中的語句區塊,然後再進行while語句中的條件判斷,如果判斷成立(true),則繼續回到上面do後面的大括號中執行語句區塊,否則就結束。
for循環結構-建議使用:
for循環基本形式:
for( 【循環變數初始化A】; 【循環變數作為條件判斷B】;【循環變數值的改變C】 )
{
//循環體D,也就是重複執行的語句區塊
}
for迴圈的執行邏輯(順序):
A è Bètrue è D è C è Bètrue è D è C è Bè
┗èfalseèfor循環結束 ┗èfalseèfor循環結束
函數
函數不是數。
函數只是一種語法結構。
函數是一種將若干行程式碼「包裝」起來作為一個整體而使用的一種語法結構。
函數可以說是一種需要去定義並使用的語法-類似變數:需要定義,並使用之。
函數是為了完成某種特定功能且通常是「需要重複執行的功能」——函數的目的是執行其中包起來的那些程式碼區塊(語句區塊)
函數是一個獨立的執行空間,即其內容的程式碼跟函數外部的程式碼可以認為是「分離」的。
函數的定義形式:
function 函數名稱( 形式參數1, 形式參數2, …… )
{
//其中要執行的語句區塊-函數體
}
var s1 = parseInt(3.5); //3
var s2 = parseInt(3.8); //3
var s3 = parseInt(3.1); //3
var s4 = parseInt(3.0); //3
var s5 = parseInt(3); //3
——parseInt其實就是一個函數——系統內部函數。此函數具有一種「神奇的能力」:將給他的一個數字轉換成一個對應的整數,該整數是不大於該給定數字的最大整數。
提出需求:
我想要要求3與4兩個直角邊對應的斜邊。
也想要球5和6對應的斜邊,還有,7和8,還有。 。 。 。 。 。 。 。
函數到底是什麼?函數只是模組化程式設計思想的語法體現——所謂模組化程式設計思想就是將各種“反覆要執行的任務”做出一個獨立的“模組”,用的時候就“直接調用”,這樣就節省了反复要寫的那些程式碼。
函數的呼叫形式:
函數名稱( 實際參數1, 實際參數 2,….. );
函數呼叫過程:
1, 先將呼叫函數處的實際參數值一一對應傳遞給函數定義處的形式參數。
a) 形式參數一定只能是一個“變數名稱”,它代表一定的實際意義-根據函數功能而定。
b) 實際參數一定只能是一個「資料」(可能為直接資料或變數資料)
c) 注意:形式參數中的變數名稱不能使用var,也不能在其他地方定義。
2, 接著程式的執行流程進入到函數內部,依照應該的流程執行函數中的「所有語句」
3, 函數內部程式執行完畢,則程式的執行流程會回到函數呼叫的位置。
a) 若函數執行的任務需要有回傳值,則必須使用return語句將該值傳回。此時函數也自然結束了。
b) 若一個函數不需要回傳值,也是可以使用return語句的,則此時只是表示函數立即在此結束(可能並沒有完全執行完所有語句)
函數的回傳值2種情況:
有回傳值:表示函數經過一定的「計算」(執行),會得到一個數據,並且會將資料回到呼叫位置(呼叫者)。此時就必須使用「return 某值;」來實現。 ——例如:老闆拿一定的錢吩咐某員工買火車票,則該員工需要將該購得的火車票交回給老闆。
以特別注意:有回復值的時候,而將函數的呼叫當作一個值來看待。
一個函數有沒有回復值並不是指語法決定的,而是由實際需求決定-語法只是根據實際需求而變。
無回傳值:表示一個函數只是單純地去執行裡面的程式碼,執行完就算結束,並不需要回傳一個資料給「呼叫者」。
函數的參數:完全沒有語法上的規定,而是要根據應用的需求本身來決定有沒有參數或有幾個參數——即完成該函數的功能,應該提供哪些必要的數據,此數據也就反應為函數的形式參數,每個形式參數各代表一定的意義(數據)。
變數的作用域
所謂作用域就是指「有效的可用的範圍」
作用域分兩種:
全域作用域:在所有程序範圍內可使用(有效)的範圍。
局部作用域:僅可在特定範圍內(通常為函數內部)使用(有效)的範圍。
變數從作用域角度分兩種:
全域變數:指一個變數可以在全域範圍內使用(有效)。在函數外部定義的變數就是全域變數。全域變數可以在函數外部和函數內部都能使用。
局部變數:指一個變數只能在特定範圍(通常是函數)內部有效-通常是定義該變數的函數內部
系統內部函數
parseInt(xxx): 將參數xxx轉換為一個整數-取整運算。
parseInt( 3 ); è 3
parseInt( 3.8 ); è 3
parseInt( 3.1 ); è 3
parseInt( “3” ); è 3
parseInt( “3.8” ); è 3
parseInt( “3.1” ); è 3
parseInt( “3abc” ); è 3
parseInt( “3.8abc” );è 3
parseInt( “3.1abc” );è 3
parseInt( “abc3” ); è NaN
parseInt( “abc 3.8” );è NaN
parseInt( “abc3.1” );è NaN
parseInt( “abc” ); è NaN
NaN-它是一個特殊的數字(類型為number),其意義是:Not a Number(即非數字)-此情形其實通常是指需要一個數字但提供的資料不是一個數字或不能轉成一個數字的時候。 ——NaN這個數字跟任何數字都不相等,包括它本身。
parseFloat(xxx): 將參數xxx轉換為一個小數。
parseFloat ( 3 ); è 3
parseFloat ( 3.8 ); è 3.8
parseFloat ( 3.1 ); è 3.1
parseFloat ( “3” ); è 3
parseFloat ( “3.8” ); è 3.8
parseFloat ( “3.1” ); è 3.1
parseFloat ( “3abc” ); è 3
parseFloat ( “3.8abc” ); è 3.8
parseFloat ( “3.1abc” ); è 3.1
parseFloat ( “abc3” ); è NaN
parseFloat ( “abc 3.8” ); è NaN
parseFloat ( “abc3.1” ); è NaN
parseFloat ( “abc” ); è NaN
Number( xxx ): 將參數xxx轉換為一個「數字」-注意跟parseFloat比較。
Number ( 3 );
Number ( 3.8 ); è 3.8
Number ( 3.1 ); è 3.1
Number ( “3” ); è 3
Number ( “3.8” ); è 3.8
Number ( “3.1” ); è 3.1
Number ( “3abc” ); è NaN
Number ( “3.8abc” ); è NaN
Number ( “3.1abc” ); è NaN
Number ( “abc3” ); è NaN
Number ( “abc 3.8” ); è NaN
Number ( “abc3.1” ); è NaN
Number ( “abc” ); è NaN
isNaN(xxx): 判斷參數xxx是否為「非數字」-如果是非數字,結果是true,否則如果是數字,結果是false
isNaN ( 3 );
isNaN ( 3.8 );
isNaN ( 3.1 ); è 且
isNaN ( “3” ); è ”
isNaN ( “3.8” ); è false
isNaN ( “3.1” ); è false
isNaN ( “3abc” ); è true
isNaN ( “3.8abc” ); è true
isNaN ( “3.1abc” ); è true
isNaN ( “abc3” ); è true
isNaN ( “abc 3.8” ); è true
isNaN ( “abc3.1” ); è true
isNaN ( “abc” ); è true
以上就介紹了php基礎學習筆記(3),包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。