JavaScript 是一種輕量級的編程語言,很容易學習,同時也是一種被廣泛用于客戶端Web開發的腳本語言。通過本課程學習,我們可以了解到JavaScript的基本語法知識,以及怎樣使用它去創建簡單的游戲和應用。
1.獲取字符的長度
"youName".length;
2.使用"+"
加法、"-"
減法、"*"
?乘法和"/"
除法,對兩個數字進行運算;
3."//"
是注釋,注釋是一個文本行,JavaScript無法運行這行代碼。它只是用來讓人們閱讀的。
4.這是JavaScript(JS)編程語言。編程語言有很多語言,但JS有許多用途,很容易學習。
我們可以使用JavaScript來做什么?
- 使網站對用戶交互作出響應
- 構建應用程序和游戲(例如二十一點)
- 在互聯網上獲取信息(如在Twitter上找出熱門詞的主題)
- 組織和顯示數據(如電子表格自動化工作;數據可視化)
confirm('這是一個例子,使用JS在網站上創建一些交互。單擊確定繼續!');
5.輸入
prompt("你叫什么名字?");
prompt("你多大了?");
6.數據有各種類型,您已經使用了兩個。
number
: 數量,你可以做數學,number在您的代碼中,只是寫一些數字沒有引號:42
,190.12334
。string
:是字符的序列,像字母a - z一樣,空格,甚至數字。這些都是字符串:"Ryan"
,"4"
和"你叫什么名字?"
。
還有一種類型是boolean
,布爾值。它有兩個值true
或false
。例如,比較兩個數字返回真或假的結果:23 > 10
?是?true
。
var length = "我編碼如飛".length; console.log(length); length > 10
?
7.console.log()
會將括號內的內容打印到控制臺;
8.到目前為止,我們已經學習了三種數據類型:
strings
?(例: "dogs go woof!")numbers
?(例: 4,10)booleans
?(例: false, 5 > 4)
比較運算符列表:
>
?大于<
?小于<=
?小于等于>=
?大于等于==
?等于(等同)===
?等于(恒等)!==
?不等于
注意: ?"=="
?兩邊值類型不同的時候,會進行類型轉換,再比較。 ?"==="
不做類型轉換,類型不同的一定不等。 ?例如:5 == "5"
?結果為true
,而5 === "5"
?結果為false
。
console.log(15 > 4); // 15 > 4 判斷為true,所以打印結果是true console.log("Xiao Hui".length<122); console.log("Goody Donaldson".length<8); console.log(8*2===16);
9.if語句是由if
關鍵詞、一個條件
和一對大括號{ }
組成。如果條件的結果是true,花括號內的代碼將運行。
if( "youName".length >= 7 ) {console.log("你有一個很長的名字!"); }
if( "myName".length >= 7 ) {alert("你的名字很長!"); }else {alert("你的名字很短"); }
10.我們遇到一個有趣的符號稱為 "%
" 模。放在兩個數字之間時,計算機將第一個數字除以第二個,然后返回余數。所以如果我們計算 23 % 10 ,我們用23除以10,結果為2,余數是3,所以23%10結果為3。
11.x是指從哪里開始截取,y是指到哪里結束。字符串中的每個字符編號從0開始.
"some word".substring(x, y);
12.通過一個具體的,區分大小寫的名稱定義一個變量。一旦您用特定名稱創建(或聲明)一個變量,然后你可以通過這個變量名來獲取這個值。
var varName = data;
13.一個函數接受輸入,并做一些處理后,產生輸出。
// 函數看起來就像是這樣的: var divideByThree = function (number) {var val = number / 3;console.log(val); }; // 在第12行,我們調用函數的名字 //在這里,它被稱為“dividebythree” // 我們告訴計算機輸入數量(即6) // 然后電腦運行函數內的代碼! divideByThree(6);
1、?首先,我們使用var
聲明一個函數,然后給它起一個名字divideByThree。名字應以小寫字母開頭,該約定是使用駝峰命名法(每個單詞首字母大寫,第一單詞除外)。
2、 然后使用?function
關鍵字來告訴計算機你正在創建一個函數。
3、 括號中的代碼被稱為一個參數。這是一個占位符,當我們調用的時候會給它一個特定的值。
4、 然后將你要重復的代碼寫在“{ }
”之間,每段代碼必須用“;
”來結束。
可以調用函數來運行這段代碼:divideByThree(6);
使用函數,我們只需要輸入函數名來調用函數,并將參數傳入到后面的括號中。電腦將運行可重復使用的代碼,并將具體的參數值替換到代碼中。
14.return
關鍵字告訴程序什么時候函數要返回?返回值
。所以函數運行到return
關鍵字時,該功能會立即停止運行并返回值。
// 好的函數寫法 var calculate = function (number) {var val = number * 10;//就算沒有這樣的間距或換行,計算機也是可以理解這些代碼的,但使用間距和換行可以使編碼更加容易查看,并且這是最好的做法。console.log(val);//代碼塊的每一行和函數的末尾都要加上分號,分號的作用就像是一段中的一句,它有助于計算機知道每句代碼在什么時候結束。 }; // 寫的很糟的函數 var greeting = function(name){console.log(name);}
在編程D.R.Y.
原則是非常重要的。不要重復!
作用域可以是全局或局部。
在函數外部定義的變量一旦被聲明就可以在任何地方訪問,它們被稱為全局變量或者說它們的作用域是全局的。
到目前為止我們看到的函數只有一個參數。但函數寫多個參數通常是有用的。
var areaBox = function(length, width) {return length * width; };
函數內部定義的變量是局部變量。他們無法在函數外部訪問。
var
關鍵字會在當前作用域創建一個新的變量。這意味著,如果變量被聲明在函數之外,該變量就具有全局的作用域。如果變量被聲明在函數中,該變量就具有局部的作用域。
var my_number = 7; //這是全局變量 var timesTwo = function(number) {my_number = number * 2;console.log("內部函數中 my_number 的值是: ");console.log(my_number); }; timesTwo(7); console.log("外部 my_number 值是: ") console.log(my_number);
在第4行,我們沒有使用var關鍵字,所以我們在函數外用console.log
打印出my_number
的值將會是14。
15.
- 讓i遞增1的更有效的方法是使用?
i++
; - 讓i遞減1為?
i--
; - 我們可以使用?
i+=x
來編寫你希望遞增的任意值,例如:i+=3,他與i=i+3是相同的; - 我們也可以使用
i-=x
來編寫你希望遞減的任意值; - 當你編寫一個循環時,要非常小心,如果你不能正常結束這個循環,這會造成所謂的死循環,他會讓你的瀏覽器崩潰掉。
// for 循環例子: for (var counter = 1; counter < 6; counter++) {console.log(counter); }
?16.數組:
- 數據存儲列表 ;
- 可以同時存儲不同數據類型的數據;
- 數組是有序的,所以每一個數據的位置是固定的。
var names = ["Mao","Gandhi","Mandela"]; var sizes = [4, 6, 3, 2, 1, 9]; var mixed = [34, "candy", "blue", 11];
var arrayName = [data, data, data];
任何時候當你看到有“[]
”的數據,它就是一個數組。當你調用數組的?.length
時,將返回數組元素的數量。
每個數據的位置是從0開始計算的,而不是1;數組的第一個元素:junkData[0]
; 數組中的第三個元素:junkData[2]
;
var text = "Blah blah blah blah blah blah Eric \ blah blah blah Eric blah blah Eric blah blah \ blah blah blah blah blah Eric"; var myName = "Eric"; var hits = []; // Look for "E" in the text for(var i = 0; i < text.length; i++) {if (text[i] == "E") {// 如果找到了,就添加到數組中// 長度和myName長度一樣for(var j = i; j < (myName.length + i); j++) {hits.push(text[j]);}} } if (hits.length === 0) {console.log("沒有發現你的名字!"); } else {console.log(hits); }
?由于text
可能會比較長,你可以使用反斜杠“\
”來結束,然后在下一行繼續寫;
?數組有一個push()
方法,它會將括號中的內容添加到數組末尾。
newArray = []; newArray.push('hello'); newArray[0]; // 等于 'hello'
var coinFace = Math.floor(Math.random() * 2); while(coinFace === 0){console.log("正面! 繼續...");var coinFace = Math.floor(Math.random() * 2); } console.log("反面! 停止.");
?
?16.你可能已經注意到,當我們給一個變量賦值boolean類型值為true時,我們不需要用 === 來檢查這個變量,例如:
var bool = true; while(bool){//Do something }
var bool = true; while(bool === true){//Do something }
?
但第一種是更快的方式,如果你碰巧使用數字,正如我們前面做的,你甚至可以做的:
var myNumber = 1; while(myNumber) {// Do something! }
只要條件的計算結果為true
時,循環將繼續運行。如果是false
就會停下來。(當你使用一個數字來作為條件時,javascript能夠理解1代表true,0代表false)
正如我們提到的,for
循環非常適合做你提前知道你要重復多少次循環的任務。另一方面,while
循環是當你不得不循環,但你不知道有多少次循環的的時候。
有時你想確保你的循環運行至少一次。在這種情況下,你需要修改while
循環為do/while
循環。
youHit
值為Math.floor(Math.random() * 2)
,這是給youHit
設置一個隨機數0或者1;damageThisRound
值為Math.floor(Math.random()*5 + 1)
,這將生成一個1到5間的隨機數。
totalDamage = totalDamage + damageThisRound;
這有一個快捷的寫法:就是使用+=
運算符。
17.如果你調用isNaN
做一些事情,它會檢查它是不是個數字,如果是數字將返回false
。
isNaN('berry'); // => true isNaN(NaN); // => true isNaN(undefined); // => true isNaN(20); // => false
注意:如果你調用isNaN傳入的一個字符串,看起來像一個數字,比如“20”,javascript會嘗試將字符串自動轉換為數字20,這將返回false(因為20是一個數字)。
注意你不能這樣寫:
isNaN(unicorns);
除非你已經定義了一個變量叫unicorns
; 然而你可以這樣做:
isNaN("unicorns"); // => true
18.
Switch允許你預先設置多個選項(case
),然后檢查表達式是否匹配。
如果匹配,就會執行匹配的程序,如果沒有匹配的,就會執行default
選項。
19.?JavaScript有三個邏輯運算符:
- 與(&&);
- 或(| |);
- 取反(!)。
var answer = prompt("用戶問題").toUpperCase();
?
在你的提示中調用.toUpperCase()
或.toLowerCase()
,以確保獲得用戶的輸入是大寫或者小寫。
20.異構數組,這意味著數組中可以有不同類型的元素
var mix = [42, true, "towel"];
?
?不僅可以在數組中存儲不同的數據類型,甚至可以在數組中存放其他數組。可以通過嵌套來實現二維數組,像這樣:
var twoDimensional = [[1, 1], [1, 1]];
可能要求第一行有三個元素,第二行為一個元素,第三行有兩個元素。Javascript是允許的,這就是所謂的交錯數組。
var jagged = [[9,8,4],[3,2],[1]]; for (var i = 0;i<jagged.length;i++){console.log(jagged[i]); }
?
21.可以把對象當做是鍵值對的組合(如數組),只是他們的鍵不是0,1或2這些數字,它們可以是字符串和變量。
var phonebookEntry = {};phonebookEntry.name = 'tom'; phonebookEntry.number = '(555) 555-5555'; phonebookEntry.phone = function() {console.log('打電話給' + this.name + ' ,號碼是 ' + this.number + '...'); };phonebookEntry.phone();
除了它的鍵是字符串和變量外,這個對象就像是一個數組。 對象的花括號之間是收集信息(鍵和值),像這樣的:
var myObject = {key: value,key: value,key: value };
?
22.用兩種方法可以創建對象,一種是你剛剛做的,另一種是使用對象的構造函數。
var myObj = {type: 'fancy',disposition: 'sunny' };var emptyObj = {};
使用構造函數,語法如下
var myObj = new Object();//這告訴javascript我要創建一個新的事物是Object;
你已經通過兩種方式創建了對象,你可以添加鍵到你的對象。
myObj["name"] = "Charlie"; myObj.name = "Charlie";
兩者都是正確的,第二個是簡寫。看看這是不是有點類似于數組呢?
使用[]
或者.
來添加添name
和age
屬性。
添加對象到數組,我們可以這樣:
var myObj = {type: 'fancy',disposition: 'sunny' }; myArray = [myObj];
var friends = {};friends.Tom = {name: "Tom",number: "(206) 555-5555",address: ['USA','NewYork'] }; friends.Jerry = {name: "Jerry",number: "(010) 555-5555",address: ['中國','北京'] };var list = function(obj) {for(var prop in obj) {console.log(prop);} };var search = function(name) {for(var prop in friends) {if(friends[prop].name === name) {return friends[prop];}} };list(friends); console.log(search("Jerry").number);
?
現在我們來將你的一些朋友添加到friends
對象中,每個朋友需要一個名字,電話號碼,等等。我們將使用一個新對象來保存每個朋友的信息!沒錯,我們是在對象中創建對象!
將一些空對象添加到你的friends
對象中去,確保你添加的對象的名字是“Tom”和“Jerry”,我們將使用這兩個名字來做為你空對象的鍵。
var friends = {bill: {},steve: {} };
或者使用中括號([]
),或點(.
),像這樣:
friends[bill] = {};
friends.steve = {};
?23.數組和變量存儲數據是一樣的。不同的是,數組可以存儲更多的值,一個變量只能存儲一個。
要訪問數組,我們可以使用中括號符號,并要記住數組的索引是從0開始的(例如,數組中的第一個值是在位置0)。
創建一個對象就像聲明一個變量,或定義一個函數一樣,我們可以使用var
,緊隨其后的是對象的名稱和一個等號; 然后每個對象:
?1. 以“{
“開始; ?2. 里面有對象相關的信息; ?3. 以“}
“結束。
每條信息在一個對象中被稱為一個屬性。當創建一個對象時,每個屬性都有一個名稱,后面存放其值。
舉例來說,如果我們要顯示Bob
的對象,他是34歲,我們會輸入age:34
。
age
是屬性,而34
是該屬性的值。當我們有一個以上的屬性時,它們之間用逗號隔開。最后一個屬性不需要用逗號來結束。
使用點符號來訪問屬性,所以我們應該使用ObjectName.PropertyName
(例如:bob.name
);
除了點符號,我們也可以使用中括號來訪問屬性。在本例中,我們使用ObjectName["PropertyName"]
訪問所需的屬性。請注意,我們需要在屬性的名字上加上雙引號。
24.函數使用function
關鍵字后跟:
- 一對圓括號
()
里面的可放置參數。 - 一對花括號,來放置函數的代碼
{}
。 - 分號
;
。
?