javascript
JS基础篇2:
文章目錄
- 1. JS變量
- 1.1 局部變量和全局變量
- 2. JS函數
- 3. 數據類型
- 4. 事件
1. JS變量
注意:JS是弱編程語言,不論何種數據類型,賦值方式:
- 聲明:var 變量名;
- 賦值:變量名=值;
- 變量聲明后,沒手動賦值時,系統默認賦值是undefined.
1.1 局部變量和全局變量
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>JS的局部變量和全局變量</title> </head> <body><script type="text/javascript">/** 全局變量:* 在函數體之外聲明的變量屬于全局變量,全局變量的生命周期是:* -瀏覽器打開時聲明,瀏覽器關閉時銷毀,盡量少用。因為全局變量會一直在瀏覽器的內存當中,耗費內存空間。* -能使用局部變量盡量使用局部變量。* 局部變量:* 在函數體當中聲明的變量,包括一個函數的形參都屬于局部變量,* 局部變量的生命周期是:函數開始執行時局部變量的內存空間開辟,函數執行結束之后,局部變量的內存空間釋放。* 局部變量生命周期較短。* *///全局變量var i=100;function accessI() {//訪問的是全局變量alert("i="+i);}accessI();//全局變量var username="jack";function accessUsername() {//局部變量var username="李四";//就近原則:訪問局部變量alert("username="+username)}//調用函數accessUsername();//訪問全局變量,上面函數執行結束之后,局部變量的內存空間釋放。alert("username ="+username);function accessAge() {var age=60;alert("年齡="+age);}accessAge();//alert("age="+age);//報錯(語法不對),局部變量已經釋放了//以下語法很奇怪function myfun() {//當一個變量聲明的時候沒有使用var關鍵字,那么不管這個變量是在哪里聲明的,都是全局變量。myname="吳京";alert("myfun是"+myname)//myfun是吳京}myfun();alert("myfun="+myname)//myfun=吳京,還是會輸出,myname未使用var,是全局變量</script> </body> </html>2. JS函數
函數表示的2種方式:
第一種方式:
function 函數名(形式參數列表){
函數體;
}
第二種方式:
函數名=function(形式參數列表){
函數體;
}
(1)
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>JS函數初步</title> </head> <body> <script type="text/javascript">/** 1.JS中的函數:等同于JAVA語言中的方法,函數是一段可以被* 重復利用的片段。** 2.JS語法格式: JS的函數不需要指定返回值類型,返回什么類型都行。* 第一種方式:* function 函數名(形式參數列表){* 函數體;* }* 第二種方式:* 函數名=function(形式參數列表){* 函數體;* }* */function sum(a,b) {//a和b都是局部變量,他們都是形參(a和b都是變量名,變量名隨意)alert(a+b)}//函數只有調用才能執行的sum(12,34)//定義函數sayHellosayHello=function (username) {alert("hello "+username)}//調用函數sayHello("胡歌") </script><input type="button" value="點擊" onclick="sayHello('JACK')"/><input type="button" value="求和" onclick="sum(10,18)"/> </body> </html>(2)JS語法隨意,"+"也表示字符串拼接。
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>JS函數初步</title> </head> <body> <script type="text/javascript">/** java中的方法有重載機制,JS中的函數能重載嗎?* JS當中的函數在調用的時候,參數的類型沒有限制,并且參數的個數也沒有限制,JS就是這么隨意。(弱類型)* */function sum(a,b) {return a+b;}//調用sum函數var retValue=sum(2,4);alert(retValue)//6//字符串拼接 "+"是連接的作用var retValue2=sum("JACK");//JACK賦值給a變量,b變量沒有賦值,系統默認賦值undefinedalert(retValue2);//JACKundefinedvar retValue21=sum(3,"號是科比");alert(retValue21);//3號是科比var retValue3=sum();alert(retValue3);//NaN (NaN是一個具體存在的值,該值表示不是數字)var retValue4=sum(1,2,3,4);alert(retValue4)//3,1+2=3 后面數字作廢/** 在JS中,函數的名字不能重名,當函數重名的時候,后聲明的函數會將之前聲明的同名函數覆蓋。* */function test1(username) {alert("test1");}function test1() {alert("test1,test1,test1");}test1("陳浩民")//這個調用的是第二個test1()函數。test1,test1,test1 </script> </body> </html>3. 數據類型
- 原始類型:Undefined、Number、String、Boolean、Null
- 引用類型:Object以及Object的子類
- typeof運算符的運算結果是以下6個字符串之一:注意字符串都是小寫。
“undefined” “number” “string” “boolean” “object” “function”
數據類型
(1)undefined
(2)Number
<script type="text/javascript">/** 1.Number類型包括哪些值?* -1 0 1 2 2.3 3.14 100......NaN Infinity* 整數、小數、正數、負數、不是數字、無窮大都屬于Number類** 2.關于NaN(表示Not a Number,不是一個數字,但屬于Number類型);* 什么情況出現NaN?* 運算結果本來應該是一個數字,最后算完不是一個數字的時候,結果是NaN.* 3.isNaN函數:true表示不是一個數字,false表示是一個數字。* 4.parseInt()函數* 5.parseFloat()函數* 6.Math.ceil()函數:向上取整* */var v1=1;var v2=213.32;var v3=-123;var v4=NaN;var v5=Infinity;//Numberalert(typeof v1);alert(typeof v2);alert(typeof v3);alert(typeof v4);alert(typeof v5);var a=100;var b="中國";alert(a/b);//除號顯然最后結果應該是一個數字,但是運算的過程中導致最后不是一個數字,那么結果是NaN.var e=1213;var f="janjieshi";alert(e+f);//1213janjieshi,先進行字符串拼接運算//Infinity(當除數為0的時候,結果為無窮大)alert(10/0);//Infinity//isNaN函數:結果是true表示不是一個數字,反之,是數字function sum(a,b) {if (isNaN(a)||isNaN(b)){alert("參與運算的必須是數字");return;}return a + b;}sum(100,"acv");alert(sum(100,200));//parseInt():可以將字符串自動轉換成整型數字,并且取整數位。alert(parseInt("3.9999"));//3alert(parseInt(3.9999));//3//parseFloat():可以將字符串自動轉換成浮點型數字。alert(parseFloat("3.434")+2);//5.434//Math.ceil()alert(Math.ceil(2.1));//3,向上取整。alert(10/3);//3.3333333333333335</script>(3)Boolean
<script type="text/javascript">/** 1.JS中Boolean類型有2個值:true和false;* 2.在Boolean類型中有一個函數叫做:Boolean()* 語法格式:Boolean(數據)* Boolean()函數的作用是將非布爾類型轉換成布爾類型。* */var username="Jack";/*if(Boolean(username)){alert("歡迎你"+username);}else {alert("用戶名不能為空")}*/if(username){//可以省略,自動調Boolean函數轉換成boolean類型alert("歡迎你"+username);}else {alert("用戶名不能為空")}//規律:“有”就轉換成true,"沒有"就轉換成falsealert(Boolean(23));//truealert(Boolean(0));//falsealert(Boolean(""));//falsealert(Boolean("acdl"))//truealert(Boolean("null"));//falsealert(Boolean(NaN));//falsealert(Boolean("undefined"));//falsealert(Boolean(Infinity));//true//無限循環while (10/3){alert("啊哈哈");}</script>(4)String(常用函數)
- 第一種:var s = “abc”;
- 第二種:(使用JS內置的支持類String):var s2=new String(“abc”);
(5)Object類型
JS中的Object類型:
1.Object類型是所有類型的超類,自定義的任何類型,默認繼承Object。
2.Object類包括哪些屬性?
* prototype屬性(常用的,主要是這個):作用是給類動態的擴展屬性和函數。
* constructor屬性
3.Object類包括哪些函數?
* toString()/valueOf()/toLocaleString()
4.在JS當中定義的類默認繼承Object,會繼承Object類中所有屬性以及函數。自己定義的類也有prototype屬性。
(6)null
<script type="text/javascript">//null NaN undefined 數據類型不一致alert(typeof null);//Null類型 objectalert(typeof NaN);//Number類型 numberalert(typeof undefined);//Undefined類型 undefined//null和undefinedkey可以等同alert(null==NaN);//falsealert(null==undefined)//truealert(undefined==NaN)//false//JS當中有兩個比較特殊的運算符//==(等同運算符:只判斷值是否相等)//===(全等運算符:既判斷值是否相等,又判斷數據類型是否相等)alert(null===NaN);//falsealert(1==true)//truealert(1===true)//false,1是Number類型,true是Boolean類型</script>4. 事件
JS的常用事件:
* (1)blur失去焦點,focus獲得焦點;
* (2)change下拉列表選中項改變,或文本框內容改變;
* (3)select文本被選定
* (4)load頁面加載完畢
* (5)click鼠標單擊,dblclick鼠標雙擊
* (6)keydown鍵盤按下,keyup鍵盤彈起
* (7)mousedown鼠標按下,mouseover鼠標經過,mousemove鼠標移動,mouseout鼠標離開,mouseup鼠標彈起
* (8)reset表單重置,submit表單提交
*
* 任何事件都會對應一個事件句柄,事件句柄就是在事件前面加on,
* 事件句柄以屬性的形式存在
(1)事件注冊的2種方式:
<script type="text/javascript">function sayHello() {alert("hello,美好世界")}</script><!--注冊事件的第一種方式:直接在標簽中使用事件句柄--><input type="button" value="hello" ondblclick="sayHello()"/><!--鼠標雙擊出結果--><input type="button" value="hello2" id="mybtn"><input type="button" value="hello3" id="mybtn1"><input type="button" value="hello4" id="mybtn2"><script type="text/javascript">/** 第二種注冊事件的方式:使用JS代碼塊完成事件的注冊。* 第一步:先獲取這個按鈕對象(document和window一樣是全部小寫,內置對象,可以直接用,document就代表整個HTML頁面)。* document代表瀏覽器窗口下的文本,window代表瀏覽器窗口。* 第二步:給按鈕對象的事件句柄屬性賦值* */function doSome() {alert("注冊事件的第二種方式")}//第一步:getElementById通過id獲取元素,document和window一樣//以后btnObj節點對象就代表<input type="button" value="hello2" id="mybtn">,可以調用其下屬性。var btnObj=document.getElementById("mybtn");//給按鈕onclick屬性賦值btnObj.onclick=doSome;//注意:別加小括號.doSome()錯誤寫法//這行代碼的含義是,將回調函數doSome注冊到click事件上var btnObj1=document.getElementById("mybtn1");btnObj1.onclick=function () {//這個函數沒有名字,叫做匿名函數,這也是回調函數。alert("test..........")}document.getElementById("mybtn2").onclick=function () {alert("test22222...")}</script>(2)代碼執行順序
<body onload="ready()"><!--load事件是在頁面全部元素加載完畢之后才會發生--><script type="text/javascript">function ready() {//這個ready代表body οnlοad="ready()"document.getElementById("btn").onclick=function () {alert("hello JS!");}}</script><input type="button" value="hello" id="btn"/>以后以下面代碼執行
<body> <script type="text/javascript">/*把body里的onload直接放到JS代碼塊中*1.頁面打開時,將a函數注冊給了load事件,* 2.頁面加載完畢之后,load事件發生了,此時執行回調函數a* 3.回調函數a執行的過程中,把b函數注冊給了id="btn1"的click事件* 4.當id="btn1"的節點發生click事件之后,b函數被調用并執行。*/window.onload=function () {//這個回調函數加做adocument.getElementById("btn1").onclick=function () {//這個回調函數叫做balert("hello 你好");}}//下面的window需要重新建一個,懶得建了,不允許2個重復的,否則后面覆蓋前面window.onload=function () {document.getElementById("btn3").onclick=function () {var mytext=document.getElementById("btn2");//一個節點對象中只要有的屬性都可以"."mytext.type="checkbox";}} </script> <input type="button" value="hello2" id="btn1"/><input type="text" id="btn2"/> <input type="button" value="將文本框修改為復選框" id="btn3"/> </body>(3)捕捉鍵盤keydown事件
<script type="text/javascript">window.onload=function () {var usernameElt=document.getElementById("username")//回車鍵的值是13,ESC鍵的鍵值是27usernameElt.onkeydown=function (event) {//獲取鍵值//對于“鍵盤事件對象”來說,都有keyCode屬性用來獲取鍵值alert(event);//object KeyboardEventalert(event.keyCode);//13. 回車鍵的值是13if(event.keyCode==13){alert("正在進行驗證.....")}}}</script>(4) void運算符
<head><meta charset="UTF-8"><title>JS的void運算符</title> </head> <body> <!---void運算符的語法:void(表達式)運算原理:執行表達式,但不返回任何結果。javascript:void(0)其中javascript:作用是告訴瀏覽器后面是一段JS代碼,以下程序的javascript:是不能省略的,否則href會把雙引號里當做路徑處理。 ---><a href="javascript:void(100)" onclick="window.alert('test code')">既保留住超鏈接的樣式,同時用戶點擊該超鏈接的時候執行一段JS代碼,但頁面還不能跳轉。</a> </body>(5) 控制語句
<head><meta charset="UTF-8"><title>JS的控制語句</title> </head> <body><script type="text/javascript">/*1.if語句 2.switch 3.while 4.do...while..* 5.for循環 6.break語句 7.continue語句* 8.for...in語句 9.with語句* *///創建JS數組,數據類型不統一,元素的個數隨意var arr=[false,true,1,2,"abc",3.12];//遍歷數組for(var i=0;i<arr.length;i++){alert(arr[i]);}//for..in,數組下標for(var i in arr){alert(i);alert(arr[i]);}//for..in語句可以遍歷對象的屬性User=function (username,password) {this.username=username;this.password=password;}var u=new User("張三","123");alert(u.username+","+u.password);//張三,123alert(u["username"]+","+u["password"]);//張三,123for(var shuXinMing in u){alert(shuXinMing)//username password 屬性名alert(typeof shuXinMing)//string string shuXinMing是一個字符串alert(u[shuXinMing])//張三 123 本身就是string類型,不需要加“”}with(u){//u代替了u.username中的ualert(username+","+password)}</script> </body> </html>總結
- 上一篇: Android(root)设备HTTPS
- 下一篇: 线性规划(一):基本概念