1、 簡介
一、什麼是javascript
JavaScript 是網景(Netscape)公司開發的一種基於客戶端瀏覽器、面向(基於)對象、事件驅動式的網頁腳本語言。
二、爲何要使用javascript
表單驗證
網頁特效
小遊戲
Ajax
三、快速入門
在程序中,若是想編寫js代碼,有兩種辦法:
1)在html文件中,在一對script標記中,直接編寫
<script language='javascript'>
document.write('hello');
</script>
2)在js中,直接編寫,在html中,使用一對script標記直接引用
<script language='javascript' src='demo01.js'></script>
以上兩種不能在一對script標記中重複使用,引用就不能寫文件內容。
2、基礎語法
一、基本格式
JavaScript區分大小寫,變量a和變量A是兩個變量。
JavaScript腳本程序須嵌入在HTML文件中。
JavaScript腳本程序中不能包含HTML標記代碼。
<script>
document.write(‘<table></table>');
</script>
每行寫一條腳本語句,語句末尾能夠加分號。JavaScript腳本程序能夠獨立保存爲一個外部文件。
二、關於script標籤
Language:引用的語言 javascript、php、c#、VBSCRIPT。
src:引用一個外部的js文件。
三、關於變量
變量是用來臨時存儲數值的容器,變量存儲的數值是能夠變化的。變量必需要先聲明才能使用,使用var聲明變量。
使用var聲明的是局部變量,沒有使用var聲明的是全局變量。
變量的命名規則:第一個字符必須是英文字母,或者是下劃線(_);其後的字符,能夠是英文字母,數字,下劃線;變量名不能是JavaScript的保留字。
變量的做用域:全局變量、局部變量。
四、數據類型(若類型語言,定義無需制定數據類型)
String :字符串可使用‘'和「」。
Number :數字 十、10.0一、100。
Boolean :布爾型 true、false。
Undefined :未定義。
Null :空。
Object:對象類型。
<script language='javascript'>
//使用js描述一我的的完整信息
var name='張三';
var age=30;
var marry=true;
var height=1.8;
document.write('<ol>');
document.write('<li>姓名'+name+'</li>');
document.write('<li>年齡'+age+'</li>');
document.write('<li>婚否'+marry+'</li>');
document.write('<li>身高'+height+'</li>');
document.write('</ol>');
function Person(){}
var p1=new Person();
p1.name='李四';
p1.age=20;2013/12/31
document.write(p1.name+'<br>');
document.write(p1.age+'<br>');
</script>
五、運算符
1)算術運算符
+、-、*、/、%、++、–
i++
++i
<script>
var i=10;
var j=i++; //先賦值再自加
var k=++i; //先自加再賦值
document.write(j); //10
document.write(k); //12
</script>
2)比較運算符
>、<、>=、<=、!=、==、===、!==
==和===有何區別?
== :判斷值是否相等。
===:判斷值相等類型也相同。
<script>
var i=5; //Number
var j="5"; //String
if(i==j){
document.write('相等');
}
if(i===j){
document.write('全等於');
}
</script>
3)邏輯運算符
&&、||、!
4)賦值運算符
=、+=、-=、*=、/=、%=
將運算符左邊的與右邊的進行計算,再賦值給左邊的
5)字符串運算符
+、+=
3、流程結構
一、順序結構
代碼是一行接着一行執行
二、分支結構
if、else、else if、switch
三、循環結構
for、while、do….while、for…..in
小遊戲:
猜數遊戲:進入到頁面以後、隨機一個數1–500、彈出輸入框,由用戶輸入一個數字,若是這個數字大於隨機數,則提示打了;小於隨機數,則提示小了。等於則提示答對了。
<script language='javascript'>
var n=Math.round(Math.random()*500); // 隨機數
alert(n);
while(true){
var number=prompt('請輸入一個0--500之間的數字'); //用戶輸入
if(number>n) alert('大了');
if(number<n) alert('小了');
if(number==n){
alert('答對了~~~~');
break;
}
}
</script>
4、函數
一、函數的功能
代碼重複性使用
模塊化編程
二、語法:
使用函數前要先定義才能調用, 函數定義有三個部分:函數名,參數列表,函數體。
定義函數的格式以下:
-----
function 函數名([參數1,參數2…]){
函數執行部分;
return 表達式;
}
-----
調用語法:
函數名(實參1,實參2,……,);
三、代碼示例
例1:關於函數的定義和調用
//函數的定義
function display(){
alert('hello');
}
display();
例2:關於js中的參數傳遞
在js中,對象類型默認就是按地址傳遞
function display(obj){
obj.name='lisi';
}
var p1=new Object();
p1.name='zhangsan';
display(p1);
alert(p1.name);//lisi
alert(p1);
JS的基本類型,是按值傳遞的。
var a = 1;
function foo(x) {
x = 2;
}
foo(a);
console.log(a); // 仍爲1, 未受x = 2賦值所影響
再來看對象:
var obj = {x : 1};
function foo(o) {
o.x = 3;
}
foo(obj);
console.log(obj.x); // 3, 被修改了!
說明o和obj是同一個對象,o不是obj的副本。因此不是按值傳遞。 但這樣是否說明JS的對象是按引用傳遞的呢?咱們再看下面的例子:
var obj = {x : 1};
function foo(o) {
o = 100;
}
foo(obj);
console.log(obj.x); // 仍然是1, obj並未被修改成100.
若是是按引用傳遞,修改形參o的值,應該影響到實參纔對。但這裏修改o的值並未影響obj。 所以JS中的對象並非按引用傳遞。那麼究竟對象的值在JS中如何傳遞的呢?
對於對象類型,因爲對象是可變(mutable)的,修改對象自己會影響到共享這個對象的引用和引用副本。而對於基本類型,因爲它們都是不可變的(immutable),按共享傳遞與按值傳遞(call by value)沒有任何區別,因此說JS基本類型既符合按值傳遞,也符合按共享傳遞。
var a = 1; // 1是number類型,不可變
var b = a;
b = 6;
據按共享傳遞的求值策略,a和b是兩個不一樣的引用(b是a的引用副本),但引用相同的值。因爲這裏的基本類型數字1不可變,因此這裏說按值傳遞、按共享傳遞沒有任何區別。
基本類型的不可變(immutable)性質:
基本類型是不可變的(immutable),只有對象是可變的(mutable). 例如數字值100, 布爾值true, false,修改這些值(例如把1變成3, 把true變成100)並無什麼意義。比較容易誤解的,是JS中的string。有時咱們會嘗試「改變」字符串的內容,但在JS中,任何看似對string值的」修改」操做,實際都是建立新的string值。
var str = "abc";
str[0]; // "a"
str[0] = "d";
str; // 仍然是"abc";賦值是無效的。沒有任何辦法修改字符串的內容
而對象就不同了,對象是可變的。
var obj = {x : 1};
obj.x = 100;
var o = obj;
o.x = 1;
obj.x; // 1, 被修改
o = true;
obj.x; // 1, 不會因o = true改變
這裏定義變量obj,值是object,而後設置obj.x屬性的值爲100。然後定義另外一個變量o,值仍然是這個object對象,此時obj和o兩個變量的值指向同一個對象(共享同一個對象的引用)。因此修改對象的內容,對obj和o都有影響。但對象並不是按引用傳遞,經過o = true修改了o的值,不會影響obj
例3:關於函數的返回值問題
function display(first,second){
//函數遇到return會當即返回,後面代碼不執行
return first+second;
}
var i=10;
var j=20;
alert(display(i,j));
document.write(display(i,j));*/
例4:關於匿名函數
/*var i=function(){
alert('hello');
};*/
i();//變量能夠保存數據,也能夠保存地址
function display(){}會在window對象下添加一個叫display的變量,它指向了這個函數的首地址
Window.i=display 咱們讓window對象下的i指向這個函數的首地址。
display()等同於i()。
例5:自調用匿名函數
<script language='javascript'>
/*var i=function(){
alert('hello');
};
i();*/
(function(first){
alert(first);
alert('hello,js');
})(10)
</script>
function(){} :至關於返回首地址。
(function(){}) :把這部分看作一個總體
(function(){})():至關於找到這個地址並執行。
以上這種寫法:能夠避免代碼庫中的函數有重命問題,而且以上代碼只會在運行時執行一次,通常用作初始化工做。
例6:全局變量與局部變量
<script>
function display(){
//var i=20; //局部變量只在局部做用域起做用
i=20; //全局的,會將全局i的值修改成20
}
display();
alert(i);
</script>
在函數內部定義的就是局部的,不然就是全局的。 若是函數內的變量沒有var聲明會直接影響全局的。
爲何沒有var是全局的?
由於在js中,若是某個變量沒有var聲明,會自動到上一層做用域中去找這個變量的聲明語句,若是找到,就使用;若是沒有找到,繼續向上查找,一直查找到全局做用域爲止;若是全局中仍然沒有這個變量的聲明語句,那麼會自動在全局做用域進行聲明。這個就是js中的做用域鏈
代碼示例:
<script>
var i=10;
function fn1(){
var i=100;
function fn2(){
i=1000;
function fn3(){
i=10000;
}
fn3();
console.log(i);//10000
}
fn2();
console.log(i);//10000
}
fn1();
console.log(i);//10
</script>
5、arugments的使用
在一個函數內部,可使用arguments屬性,它表示函數的的形參列表,它是以數組形式體現的。
例1:在定義display函數時,它的實參個數必需要與形參個數保持一致,有時,咱們定義函數時,形參數目不能固定,如何解決?
<script>
function display(){
//沒有定義形參,那麼全部形參會自動存放到arguments這個屬性數組中。
for(var i=0;i<arguments.length;i++){
document.write(arguments[i]+'<br>');
}
}
display('lisi','zhangsan','wangwu'); //三個實參
display('zhangsan','lisi','wangwu','xiaoqiang','wangcai'); //五個實參
</script>
若是定義時,參數個數不肯定,能夠經過arguments來保存全部實參
例2:使用js函數來計算每一個公司的員工工資總額
<script>
function display(){
var sum=0; //總額
for(var i=0;i<arguments.length;i++){
sum+=arguments[i];
}
document.write(sum+'<br>');
}
//A公司
display(10000,2000,5000);
//B公司
display(1000,2000,5000,8000,10000);
</script>
6、經常使用操做
一、輸出內容(document.write)
document.write()直接在網頁中輸出內容。
第一種:輸出內容用「」括起,直接輸出「」號內的內容。
document.write("I love JavaScript!");
第二種:經過變量,輸出內容
var mystr = "hello world";
document.write(mysrt);//直接寫變量名,輸出變量存儲的內容
第三種:輸出多項內容,內容之間用+號鏈接。
var mystr = "hello";
document.write(mystr + "I love Java Script");//多項內容之間用+號鏈接
第四種:輸出HTML標籤,並起做用,標籤使用「」括起來。
var mystr="hello";
document.write(mystr+"<br>");//輸出hello後,輸出一個換行符
document.write("JavaScript");
二、警告(alert 消息對話框)
咱們在訪問網站的時候,有時會忽然彈出一個小窗口,上面寫着一段提示信息文字。若是你不點擊「肯定」,就不能對網頁作任何操做,這個小窗口就是使用alert實現的。
語法:alert(字符串或變量);
var mynum = 30;
alert("hello!");
alert(mynum);
結果:按順序彈出消息框(alert彈出消息對話框包含一個肯定按鈕)
注意:
--在點擊對話框"肯定"按鈕前,不能進行任何其它操做。
--消息對話框一般能夠用於調試程序。
--alert輸出內容,能夠是字符串或變量,與document.write 類似
三、確認選擇(confirm 消息對話框)
除了向用戶提供信息,咱們還但願從用戶那裏得到信息。這裏就用到了confirm 消息對話框。
confirm 消息對話框一般用於容許用戶作選擇的動做,如:「你對嗎?」等。彈出對話框(包括一個肯定按鈕和一個取消按鈕)。
語法:confirm(str);
參數說明:str:在消息對話框中要顯示的文本 返回值:Boolean值
返回值:
當用戶點擊"肯定"按鈕時,返回true
當用戶點擊"取消"按鈕時,返回false
注: 經過返回值能夠判斷用戶點擊了什麼按鈕
<script type="text/javascript">
var mymessage=confirm("你喜歡JavaScript嗎?");
if(mymessage==true){
document.write("很好,加油!");
}else{
document.write("JS功能強大,要學習噢!");
}
</script>
四、提問(prompt 消息對話框)
有時候,不只但願用戶回答Yes/No。而是但願獲得更特定的響應。這中狀況咱們能夠利用prompt。
prompt彈出消息對話框,一般用於詢問一些須要與用戶交互的信息。彈出消息對話框(包含一個肯定按鈕、取消按鈕與一個文本輸入框)。
語法:
prompt(str1,str2);
參數說明:
str1:要顯示在消息對話框中的文本,不可修改
str2:文本框中的內容,能夠修改
返回值:
點擊肯定按鈕,文本框中的內容將做爲函數返回值
點擊取消按鈕,將返回null
function rec(){
var score; //score變量,用來存儲用戶輸入的成績值。
score = prompt("請輸入你的成績","90");
if(score>=90){
document.write("你很棒!");
}else if(score>=75){
document.write("不錯吆!");
}else if(score>=60){
document.write("要加油!");
}else{
document.write("要努力了!");
};
} ;
<script>
var myName = prompt("輸入您的名字");
if(myName != null && myName != ""){
document.write("welcom to" + myName);
}else{
document.write("welcom to my friend");
}
</script>
四、打開新窗口(window.open)
語法:
window.open([URL], [窗口名稱], [參數字符串])
參數說明:
URL:可選參數,在窗口中要顯示網頁的網址或路徑。若是省略這個參數,或者它的值是空字符串,那麼窗口就不顯示任何文檔。
窗口名稱:可選參數,被打開窗口的名稱。該名稱由字母、數字和下劃線字符組成。能夠
是"_top"、"_blank"、"_selft"、"_parent"等。_blank 在新窗口顯示目標網頁,_selft 在當前窗口顯示目標網頁,_parent 框架網頁中當前整個窗口位置顯示目標網頁,_top 框架網頁中在上部窗口中顯示目標網頁。相同 name 的窗口只能建立一個,要想建立多個窗口則 name 不能相同。name不能包含有空格。
參數字符串:可選參數,設置窗口參數,各參數用逗號隔開。
參數表:
top Number 窗口頂部離開屏幕頂部的像素數
left Number 窗口左端離開屏幕左端的像素數
width Number 窗口的寬度
height Number 窗口的高度
menubar yes,no 窗口有沒有菜單
toolbar yes,no 窗口有沒有工具條
scrollbars yes,no 窗口有沒有滾動條
status yes,no 窗口有沒有狀態欄
<script type="text/javascript">
window.open('http://','_blank','width=300,height=200,menubar=no,toolbar=no, status=no,scrollbars=yes')
</script>
五、關閉窗口(window.close)
close()關閉窗口
用法:
window.close();//關閉本窗口
<窗口對象>.close();//關閉指定的窗口
例如:關閉新建的窗口。
<script type="text/javascript">
var mywin=window.open('http://www.baidu.com'); //將新打的窗口對象,存儲在變量mywin中
mywin.close();
</script>
六、顯示和隱藏(display屬性) 語法: Object.style.display = value value值: none 此元素不會被顯示(及隱藏) block 此元素將顯示爲塊級元素(即顯示) mychar.style.display = "block" 七、控制類名(className屬性) className屬性設置或返回元素的class屬性。 語法: object.className = classname 做用: 獲取元素的class屬性;爲網頁內的某個元素指定一個css樣式來更改該元素的外觀。 p2.className = "two";