JavaScript--基於對象的指令碼語言學習筆記(一),javascript指令碼語言

來源:互聯網
上載者:User

JavaScript--基於對象的指令碼語言學習筆記(一),javascript指令碼語言

1、兩種嵌入js的方式
   使用javascript首碼構建url:<a href="javascript:alert('運行JavaScript。。')">運行js</a>
   js指令碼放在<style></style>之間:

<style type="text/javascript">alert("運行JavaScript。。")</script>
2、如果沒有聲明變數直接使用會報錯:ReferenceError: x is not defined

   如果聲明了沒有賦值,則該變數的值為undefined

3、單獨儲存js 檔案
   <script src="test.js" type="text/javascript"></script>

4、3個強制類型轉換的函數
   toString()將布爾值、數值轉換為字串
   parseInt()將字串、布爾值轉換為整數
   parseFloat()將字串、布爾值轉換為浮點數
5、javascript的變數沒有區塊範圍,這一點和Java、C++等不同
6、如果用var來定義變數,程式會強制定義一個新變數。
   儘管js是弱類型指令碼語言,聲明變數時無需指定變數的基本類型。但是js的值
   儲存到記憶體時也是有類型的。有5個基本類型。
7、Infinity、-Infinity與其他數值進行算術運算時,整個算式變成:NaN
   兩個Infinitiy是相等的
   兩個NaN不等
8、js中的複合類型
   Object:對象
   Array:數組
   Function:函數
9、js中的數組元素類型並不要求相同,且數組長度可以任意變化
   訪問數組元素時不會產生數組越界,只會顯示該元素的值為undefined
10、void強制指定運算式不會有返回值
11、
var a=[];    for(var i=0;i<10;a[i++]=i+10);//利用空語句    for(index in a){document.writeln(a[index]+"<br/>"); }//index儲存的是索引值

12、js支援自已定義錯誤,js只有一個異常類:Error,catch塊類也無需聲明異常的類
for(var i=0;i<10;i++){    if(i>4) throw new Error("使用者自訂錯誤");     document.writeln(i+"<br/>");}
13、使用with避免重複書寫對象
    with(object){statements}
   如:省寫了document
with(document){ writeln( "hello<br/>"); writeln( "hello2<br/>");  writeln( "hello3<br/>");}
14、js的函數即是可重複調用的“程式塊”,也是一個Function執行個體
    推薦使用匿名函數
var f=function(parameter){       函數體    };
    例子:
var a=function(){ alert("調用匿名函數")};a();  //函數調用
  
15、遞迴一定要向已知點追溯

★16、注意:js的函數不僅是一個函數,更是一個類,在定義js函數的同時也得到一個與該函數同名的類
     該函數也是該類的唯一構造器。(定義一個函數的同時,實質上也定義了一個構造器,當定義函數時,
     函數中以this修飾的變數是執行個體屬性,如果某個屬性值是函數時,即可認為該屬性變成了方法)
     因此有兩種方式調用函數:
     1.直接調用
     2.用new 關鍵字調用,這樣總會有返回值,返回值就是一個js對象
例:function Person(name,age){this.age=age;this.name=name;this.info=function(){document.writeln("我的名字是:"+this.name+"</br>");document.writeln("我的age是:"+this.age+"</br>");};}//建立p對象var p=new Person("周鵬程",24);p.info();//Person類定義了一個方法,通過使用匿名函數使代碼更加簡潔
上面把js中定義的一個函數附加到某個對象上,作為該對象的方法
事實上,如果沒有明確指定將函數“附加”到哪個對象上,該函數將“附加”到window對象上

17、js與Java不一樣,它是一種動態語言,它允許隨時為對象增加屬性和方法
    其實當我們直接為對象的某個屬性賦值時,即視為給對象增加屬性。
    注意:JavaScript對象不能訪問它所屬類的類屬性
    如果直接定義一個全域變數,實際上這個變數會被“附加”到window對象上,作為window對象的執行個體屬性

18、js中調用函數的3種方法
   1.直接調用:以函數“附加”的對象作為調用者,在函數後括弧內傳入參數來調用函數
   2.call()方法動態調用函數
    例子:
var each=function(arr,fn){for(var s in arr){fn.call(null,s,arr[s]);}}each([4,20,3],function(a,b){document.writeln("數組的第"+a+"個元素是:"+b+"<br/>");});//調用者.函數(參數1,參數2...)<=>函數.call(調用者,參數1,參數2...)

   3.以apply()方法調用函數
     通過call()調用函數時,必須在括弧中詳細地列出每個參數。
     而通過apply()調用函數時,可以在括弧中以arguments來代表所有參數
var myfun=function(a,b){alert("a="+a+"\nb="+b);}myfun(1,2);myfun.call(window,1,2);var fun2=function(num1,num2){    myfun.apply(this,arguments);}fun2(1,2);myfun.apply(window,[1,2]);//arguments來代表所有參數,arguments本質上是個數組

19、js中函數是“一等公民”,它永遠是獨立的,函數永遠不會從屬於其他類、對象
 function Person(name){ this.name=name; this.info=function(){ alert("我的name是:"+this.name); } } var per=new Person("zpc"); per.info(); var name="window的name"; per.info.call(window);//p.info()即可引用這個函數,可以使用call()方法指定調用者

20、js中可以使用空參數,沒有傳入實參的參數值將作為undefined處理。js中沒有函數重載一說,函數名就是函數的唯一標識
    函數名相同只會導致覆蓋
    function test1(){alert("test1");}    function test1(s){alert("test1"+s);}    test1();//輸出test1undefined

21、由於js是弱類型語言,函數定義的參數列表無需型別宣告,這一點為函數調用埋下了隱患。
    可以使用“鴨子類型”的理論改善這個問題:即在函數中先判斷參數類型,並判斷參數是否包含了需要訪問的屬性、方法,
    當這些條件都滿足時,程式才開始真正處理調用參數的屬性、方法。

22、js對象的實質就是關聯陣列
    例子:
    function Person(name,age){this.age=age;this.name=name;this.info=function(){alert("info method!");}}var p=new Person("zpc",24);//alert(p[age]);alert(p['age']);//也能輸出正確的年齡alert(p.age);for(proname in p){document.writeln("p對象的"+proname+"屬性值為:"+p[proname]+"<br/>");}

23、盡量避免使用內嵌函數為類定義方法,而應該使用增加prototype屬性的方式來增加方法。通過prototype屬性來為類動態地
    增加方法會讓程式更加安全,效能更加穩定。js的所有類(也就是函數)都有一個prototype屬性,當我們為JavaScript類的prototype
    屬性增加函數、屬性時,則可視為對原有類的擴充。通過使用prototype屬性可以對js的內建類進行擴充。
例子:
function Person(age,name){ this.name=name; this.age=age; this.info=function(){document.writeln("姓名:"+this.name+"</br>");document.writeln("年齡:"+this.age+"</br>"); }}var p1=new Person(23,"周鵬程");p1.info();//p1.walk();這裡還沒有給Person加walk方法//所有的Person執行個體共用一個walk方法,節約記憶體Person.prototype.walk=function(){document.writeln(this.name+"正在慢慢溜達。。<br/>");}document.writeln("<br/>");var p2=new Person(25,"鳥鵬");p2.info();p2.walk();p1.walk();

24、js中建立對象的3種方式:
    1.使用new 關鍵字調用構造器建立對象,如上面的例子
    2.使用Object直接建立對象
var per=new Object();per.name="鳥鵬";per.age=24;per["gender"]="男";//js允許動態添加屬性,js對象的本質是關聯陣列document.writeln(per.name+"<br/>"+per.age+"<br/>"+per.gender);
     js允許將一個已有的函數添加為對象的方法
     例子:
var per=new Object();per.name="鳥鵬";per.age=24;function abc(){document.writeln("對象的name屬性:"+this.name+"<br/>對象的age屬性:"+this.age+"<br/>");}per.info=abc;//添加abc函數為per對象的方法per.info();

     js通過new Function()方法來定義匿名函數,可以通過這種方式來為js對象增加方法
     例子:
var per=new Object();per.name="鳥鵬";per.age=24;per.info=new Function("document.writeln('對象的name屬:'+this.name);'<br/>';document.writeln('對象的age屬性:<span style="font-family: Arial, Helvetica, sans-serif;">'+this.age);");   </span><span style="font-family: Arial, Helvetica, sans-serif;">per.info();</span>
    3.使用json文法建立對象
var p={name:"zpc",age:32};alert(p);//以上就是用json文法建立的p對象var person={name:"周鵬程",gender:'male',//屬性值可以是任意的基本類型,甚至是json文法建立的對象son:{name:"鳥鵬",age:12},info:function(){document.writeln("姓名:"+this.name);document.writeln("gender:"+this.gender);document.writeln("son:"+this.son);}}person.info();//以上就是用json文法建立的person對象事實上json文法不僅僅可以用於建立對象,使用JSON文法建立數組也是非常常見的情形傳統建立數組方式一:var a=new Array(); a[0]='zpc';a[1]='niao';傳統建立數組方式二:var a=new Array('zpc','niao');使用JSON建立數組:var a=['zpc','niao'];//一個複雜的JSON對象var person={name:"周鵬程",age:24,//第三個屬性是數組schools:['小學','中學','大學'],//第四個屬性是對象數組parents:[  {name:'father',age:50,address:'shanghai'  },  {name:'mother',age:49,address:'nanjing'  }]};alert(person.parents);alert(person.parents[0].name);//事實上json已經發展成為一種輕量級的、跨語言的資料交換格式,成為了xml資料交換格式的有力競爭者














































































































































JavaScript是JAVA的指令碼語言版本

不是 它們是完全不一樣的
二者的區別體現在:
首先,它們是兩個公司開發的不同的兩個產品,Java是SUN公司推出的新一代物件導向的程式設計語言,特別適合於Internet應用程式開發;而JavaScript是Netscape公司的產品,其目的是為了擴充Netscape Navigator功能,而開發的一種可以嵌入Web頁面中的基於對象和事件驅動的解釋性語言。

其次,JavaScript是基於對象的,而Java是物件導向的,即Java是一種真正的物件導向的語言,即使是開發簡單的程式,必須設計對象。JavaScript是種指令碼語言,它可以用來製作與網路無關的,與使用者互動作用的複雜軟體。它是一種基於對象和事件驅動的程式設計語言。因而它本身提供了非常豐富的內部對象供設計人員使用。

第三,兩種語言在其瀏覽器中所執行的方式不一樣。Java的原始碼在傳遞到用戶端執行之前,必須經過編譯,因而用戶端上必須具有相應平台上的模擬器或解譯器,它可以通過編譯器或解譯器實現獨立於某個特定的平台編譯代碼的束縛。JavaScript是一種解釋性程式設計語言,其原始碼在發往用戶端執行之前不需經過編譯,而是將文字格式設定的字元代碼發送給客戶,由瀏覽器解釋執行。

第四,兩種語言所採取的變數是不一樣的。Java採用強型別變數檢查,即所有變數在編譯之前必須作聲明。JavaScript中變數聲明,採用其弱類型。即變數在使用前不需作聲明,而是解譯器在運行時檢查其資料類型。

第五,代碼格式不一樣。Java是一種與HTML無關的格式,必須通過像HTML中引用外媒體那麼進行裝載,其代碼以位元組代碼的形式儲存在獨立的文檔中。JavaScript的代碼是一種文本字元格式設定,可以直接嵌入HTML文檔中,並且可動態裝載。編寫HTML文檔就像編輯文字檔一樣方便。

第六,嵌入方式不一樣。在HTML文檔中,兩種程式設計語言的標識不同,JavaScript使用 <script>...</script> 來標識,而Java使用<applet> ... </applet>來標識。

第七,靜態繫結和動態綁定。Java採用靜態聯編,即Java的對象引用必須在編譯時間的進行,以使編譯器能夠實現強型別檢查。JavaScript採用動態聯編,即JavaScript的對象引用在運行時進行檢查,如不經編譯則就無法實現對象引用的檢查。
 
JavaScript是一種基於對象與事件驅動並具有相對安全性的用戶端指令碼語言

fun1:將輸入框的數字值+1後顯示在輸入框中。
fun2:如果輸入框的值小於-1則將輸入框顯示0,否則顯示輸入框值-1
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.