亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript基礎知識點歸納(推薦)

2019-11-20 09:31:55
字體:
來源:轉載
供稿:網友

定義在函數外的變量一定是全局變量;定義在函數內的變量,如果聲明了var,那該變量就是局部變量,如果不聲明var,那么該變量就是全局變量。

1、全局變量與局部變量
JavaScript
var global = "Global";test();function test(){  var local = "Local";  document.writeln(global);  document.writeln(local);}document.writeln(global);document.writeln(local); 

2、兩種類型的Cookie

i)持久性cookie,會被存儲到客戶端的硬盤上。

ii)回話cookie:不會被存儲到客戶端的硬盤上,而是放在瀏覽器進程所處的內存當中,當瀏覽器關閉時則該回話cookie就銷毀了。

3、在JavaScript中,函數(function)就是對象

4、在JavaScript中,沒有方法(函數)重載的概念

5、Function對象

在JavaScript中有一個Function對象,所有自定義的函數都是Function對象類型的。Function對象接受的所有參數都是字符串類型的,其中最后一個參數就是要執行的函數體,而前面的參數則是函數真正需要接受的參數。

6、隱含的對象arguments

在JavaScript中,每個函數都有一個隱含的對象arguments,表示給函數實際傳遞的參數。arguments.length就表示實際傳遞的參數的個數。

7、函數名.length

每一個函數對象都有一個length屬性,表示該函數期望接受的參數個數。它與函數的arguments不同。arguments.length表示函數實際接受的參數個數。

8、JavaScript中有五種原始數據類型

Undefined、Null、Boolean、Number以及String。(注意:在JavaScript中,沒有char數據類型)

Undefined數據類型的值只有一個:undefined;

Null數據類型的值只有一個:null;

Boolean數據類型的值有兩個:true和false;

9、typeof運算符

typeof是一元運算符,后跟變量的名稱,用于獲取變量的數據類型,其返回值有5個:undefined、boolean、number、string以及object。

10、在JavaScript中,如果函數沒有聲明返回值,那么會返回undefined11、null與undefined的關系

undefined實際上是從null派生出來的。例如:

null與undefined的關系

JavaScript

 alert(undefined == null);//瀏覽器返回true 

11、強制類型轉換

在JavaScript中有3種強制類型轉換:Boolean(value),Number(value),String(value)。

12、Object對象

在JavaScript中,所有對象都是從Object對象繼承過來的。

Object對象

JavaScript

var object = new Object();for(var v in object){  alert(v);} 

上面的代碼中,瀏覽器并沒有打印出什么,并不能說明Object對象不帶有任何屬性。下面代碼測試Object對象中的屬性是否可以枚舉,如果返回false,則說明Object對象中的屬性是不能枚舉的。

Object對象中的屬性是不能枚舉的

JavaScript

alert(object.propertyIsEnumerable("prototype")); 

瀏覽器彈出false對話框,則說明Object對象中的屬性是不能枚舉的。

接下來我們再看看window對象中的屬性是否可以枚舉的

window對象中的屬性是可以枚舉的

JavaScript

for (var v in window) {  console.log(v);} 

在Chrome瀏覽器中我們會看到瀏覽器調試控制臺中打印出一大堆屬性,說明window對象中的屬性是可以枚舉的。

13、在JavaScript中,可以動態添加對象的屬性,也可以動態刪除對象的屬性

動態添加/刪除對象的屬性

JavaScript

var object = new Object();alert(object.username);//undefined object.username = "zhangsan";alert(object.username);//zhangsan object["password"] = "123";alert(object.password);//123 delete object.username;//此時,username屬性已經被刪除alert(object.username); 

14、JavaScript中定義對象最常見的方式

定義對象最常見的方式

JavaScript

 var object = {  username:"zhangsan",  password:12345};alert(object.username);alert(object.password);

15、數組

數組定義

JavaScript

//方法一var array = new Array();array.push(1);array.push(2);array.push(3);alert(array.length); //方法二(推薦)var array = [1,25,4];array.sort();alert(array); 

調用數組的sort()方法,瀏覽器打印1,25,4,這并不是我們期望的結果。

對于JavaScript數組的sort方法來說,它會先將待排序的內容轉換為字符串(調用toString()方法),按照字符串的先后順序進行排序。

下列方式可以得到我們期望的結果(按數組大小進行排序):

數組排序

JavaScript

function compare(num1,num2) {  var temp1 = parseInt(num1);  var temp2 = parseInt(num2);  if (temp1 < temp2) {    return -1;  } else if (temp1 == temp2) {    return 0;  } else {    return 1;  }} var array = [1,25,3];array.sort(compare);alert(array); 

我們再用匿名函數的方式實現:

匿名函數排序

JavaScript

var array = [1,25,3]; array.sort(function(num1,num2){  var temp1 = parseInt(num1);  var temp2 = parseInt(num2);  if (temp1 < temp2) {    return -1;  } else if(temp1 == temp2) {    return 0;  } else {    return 1;  }}); alert(array); 

16、JavaScript中定義對象的5種方式(JavaScript中沒有類的概念,只有對象)i)基于已有對象擴充其屬性和方法

基于已有對象擴充其屬性和方法

JavaScript

 var object = new Object();//添加name屬性object.name = "zhangsan";//添加sayName方法object.sayName = function(name) {  this.name = name;  alert(this.name);};object.sayName("kyle");//調用sayName方法,name屬性被修改為kyle,瀏覽器將打印kyle 

最簡單的一種方式,使用起來并不方便,適合于臨時需要一個對象。

ii)工廠方式創建對象

不帶參數的工廠方法:

JavaScript

//工廠方法function createObject() {  var object = new Object();//創建一個對象  object.name = "zhangsan";//為該對象添加一個name屬性  object.password = "123";//為該對象添加一個password屬性  object.get = function() {//為該對象添加一個get方法    alert(this.name+","+this.password);  };  return object;//返回該對象} var object1 = createObject();//調用createObject工廠方法創建對象object1var object2 = createObject();//調用createObject工廠方法創建對象object2object1.get();//調用對象get方法object2.get();//調用對象get方法 

帶參數的工廠方法:

JavaScript

function createObject(name,password) {  var object = new Object();  object.name = name;  object.password = password;  object.get = function() {    alert(this.name+","+this.password);  };  return object;} var object1 = createObject("zhangsan","123");var object2 = createObject("lisi","456");object1.get();object2.get(); 

上面兩種不帶參數和帶參數的工廠方法缺點:

每創建一個對象,內存中就創建一個get方法,比較浪費內存,且影響性能。而我們的期望是,創建兩個不同的對象,它們的屬性是不一樣的,但方法是共用的。所以接下來我們需要改進createObject工廠方法。

改進的工廠方法:

JavaScript

function get(){  alert(this.name+","+this.password);} function createObject(name,password) {  var object = new Object();  object.name = name;  object.password = password;  object.get = get;  return object;} var object1 = createObject("zhangsan","123");var object2 = createObject("lisi","456");object1.get();object2.get(); 

 將get方法定義在createObject函數外面,這樣每創建一個對象,get方法都是共用的。讓一個函數對象被多個對象所共享,而不是每一個對象都擁有一個函數對象。

iii)構造函數方式創建對象

不帶參數的構造函數:

JavaScript

 

 function Person(){  //在執行第一行代碼前,js引擎會為我們生成一個對象  this.name = "zhangsan";  this.password = "123";  this.getInfo = function() {    alert(this.name+","+this.password);  };   //此處有一個隱含的return語句,用于將之前生成的對象返回(也是跟工廠方式不一樣的地方)} var p1 = new Person();p1.getInfo(); 

帶參數的構造函數

JavaScript

function Person(name,password) {  this.name = name;  this.password = password;  this.getInfo = function() {    alert(this.name+","+this.password);  };} var p1 = new Person("zhangsan","123");var p2 = new Person("lisi","456");p1.getInfo();p2.getInfo(); 

iv)原型(prototype)方式創建對象

prototype是Object對象里面的一個屬性

prototype

JavaScript

function Person(){ }Person.prototype.name = "zhangsan";Person.prototype.password = "123";Person.prototype.getInfo = function() {  alert(this.name+","+this.password);}; var p1 = new Person();var p2 = new Person();p1.name = "kyle";//對象生成之后再去改變屬性p1.getInfo();p2.getInfo(); 

單純地使用原型方式有兩個問題:第一,你無法在構造函數中為屬性賦初值,只能在對象生成之后再去改變屬性值。

prototype

JavaScript

function Person(){ }Person.prototype.name = new Array();Person.prototype.password = "123";Person.prototype.getInfo = function() {  alert(this.name+","+this.password);}; var p1 = new Person();var p2 = new Person();p1.name.push("zhangsan");p1.name.push("lisi");p1.password = "456";p1.getInfo();p2.getInfo() 

瀏覽器將會打?。簔hangsan,lisi,456 和 zhangsan,lisi,123.

如果使用原型方式創建對象,那么生成的所有對象會共享原型中的屬性,這樣一個對象改變了該屬性也會反應到其他對象當中。所以單純地使用原型方式是不行的,還需要結合其他方式。接下來我們會繼續介紹。

使用原型+構造函數方式來定義對象

JavaScript

function Person() {  this.name = new Array();  this.password = "123";}Person.prototype.getInfo = function() {  alert(this.name+","+this.password);}; var p1 = new Person();var p2 = new Person();p1.name.push("zhangsan");p2.name.push("lisi");p1.getInfo();p2.getInfo(); 

使用原型+構造函數方式來定義對象,對象之間的屬性互不干擾,各個對象間共享同一個方法,這是一種比較好的方式。

v)動態原型方式

JavaScript

function Person(){  this.name = "zhangsan";  this.password = "123";  if(typeof Person.flag == "undefined"){    alert("invoked");    Person.prototype.getInfo = function(){      alert(this.name + "," + this.password);    }    Person.flag = true;  }    } var p1 = new Person();var p2 = new Person();p1.getInfo();p2.getInfo(); 

在動態原型方式中,在構造函數中通過標志量讓所有對象共享一個方法,而每個對象擁有自己的屬性。上面代碼在第一次創建對象時,首先通過一個判斷語句,看flag屬性是否已經定義,若沒有定義,則通過原型方式添加getInfo方法,然后將flag設置為true,那么當第二次創建對象時,if語句判斷為假,跳過執行。這樣就達到了我們所期望的結果,創建的對象屬性是互不干擾的,而對象的方法是共享的。

17、JavaScript中對象的繼承(5種方式)

第一種方式:對象冒充

冒充對象繼承

JavaScript

//父類function Parent(username) {  this.username = username;  this.sayHello = function() {    alert(this.username);  };}//子類function Child(username,password){  //下面三行代碼是最關鍵的  this.method = Parent;  this.method(username);  delete this.method;   this.password = password;  this.sayWorld = function() {    alert(this.password);  };} var p = new Parent("zhangsan");var c = new Child("lisi","123"); p.sayHello();c.sayHello();c.sayWorld() 

第二種方式:call()

繼承的第二種實現方式,call方法方式,call方法是Function對象中定義的方法,因此我們定義的每個函數都擁有該方法。call方法的第一個參數會被傳遞給函數中的this,從第2個參數開始,逐一賦給函數中的參數。

call 繼承父類

JavaScript

function test(str) {  alert(this.name+","+str);}var object = new Object();object.name = "zhangsan";//test.call相當于調用了test函數test.call(object,"html5war");//將object賦給了this 

接下來我們用call方式實現對象的繼承

JavaScript

//父類function Parent(username){  this.username = username;  this.sayHello = function() {    alert(this.username);  };}//子類function Child(username,password) {  Parent.call(this,username);  this.password = password;  this.sayWorld = function() {    alert(this.password);  };} var p = new Parent("zhangsan");var c = new Child("lisi","123");p.sayHello();c.sayHello();c.sayWorld(); 

第三種方式:apply()

apply 繼承父類

JavaScript

//父類function Parent(username){  this.username = username;  this.sayHello = function(){    alert(this.username);  };}//子類function Child(username,password){  Parent.apply(this,new Array(username));  this.password = password;  this.sayWorld = function(){    alert(this.password);  };} var p = new Parent("zhangsan");var c = new Child("lisi","123");p.sayHello();c.sayHello();c.sayWorld(); 

apply方法與call方法很類似,apply方法也是定義在Function對象中的方法,因此我們定義的每個函數都擁有該方法。

apply方法與call方法有一個區別:Parent.apply(this,new Array(username));傳遞的第二個參數為一個數組,而call方法傳遞的是一些離散的數據參數。這兩個方法并不能說誰好誰壞,要看具體使用場景。

第四種方式:原型鏈方式(無法給構造函數傳遞參數)

原型鏈繼承

JavaScript

function Parent() { }Parent.prototype.hello = "hello";Parent.prototype.sayHello = function() {  alert(this.hello);}; function Child() { }Child.prototype = new Parent(); Child.prototype.world = "world";Child.prototype.sayWorld = function() {  alert(this.world);}; var c = new Child(); c.sayHello();c.sayWorld(); 

單純使用原型鏈方式的缺點:沒有辦法傳遞參數,只有等對象創建完之后再去修改。我們接下來結合其它的方式解決這個問題。

第五種方式:混合方式(推薦)

使用混合方式實現對象的繼承

JavaScript

function Parent(hello) {  this.hello = hello;}Parent.prototype.sayHello = function() {  alert(this.hello);} function Child(hello,world) {  Parent.call(this,hello);  this.world = world;}Child.prototype = new Parent();Child.prototype.sayWorld = function() {  alert(this.world);} var c = new Child("hello","world");c.sayHello();c.sayWorld(); 

以上這篇JavaScript基礎知識點歸納(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久成年人视频| 欧美极品在线视频| 久久久av电影| 日韩欧美在线网址| 亚洲free性xxxx护士hd| 色狠狠av一区二区三区香蕉蜜桃| 欧亚精品中文字幕| 九九热r在线视频精品| 欧美成人精品不卡视频在线观看| 亚洲国产精品电影在线观看| 992tv在线成人免费观看| 日韩欧美高清视频| 精品一区二区三区三区| 国模视频一区二区三区| 久久久av免费| 久久天堂电影网| 亚洲综合国产精品| 欧美日韩亚洲精品一区二区三区| 欧美日韩在线视频一区二区| 亚洲欧美一区二区三区情侣bbw| 97超级碰碰碰久久久| 欧美日韩亚洲精品内裤| 国产精品91久久久| 中文一区二区视频| 92版电视剧仙鹤神针在线观看| 97高清免费视频| 欧美最猛性xxxxx亚洲精品| 久久久91精品国产一区不卡| 日韩精品999| 7777kkkk成人观看| 51色欧美片视频在线观看| 日韩有码片在线观看| 日韩最新免费不卡| 亚洲第一av在线| 久久久久久久久久婷婷| 福利二区91精品bt7086| 精品国产自在精品国产浪潮| 97精品免费视频| 亚洲成年人在线播放| 在线观看久久av| 欧美中文在线观看国产| 久久精品男人天堂| 亚洲人成在线一二| 国产自摸综合网| 九九热精品在线| 日韩美女在线看| 久久久久久久999| 日韩av免费在线播放| 欧美视频专区一二在线观看| 国产在线观看不卡| 538国产精品一区二区免费视频| 久久久久久亚洲| 在线丨暗呦小u女国产精品| 亚洲综合中文字幕在线观看| 久久久久久久久久久av| 国产欧美精品在线| 精品国产一区二区三区久久狼黑人| 日韩精品中文字| 一区二区三区精品99久久| 亚洲一区二区久久| 精品激情国产视频| 欧美超级免费视 在线| 在线播放亚洲激情| 欧美肥老太性生活视频| 日韩在线视频网站| 亚洲аv电影天堂网| 永久免费毛片在线播放不卡| 日韩欧美在线播放| 欧美日本国产在线| 这里只有精品久久| 国产一区二区三区在线| 久久91精品国产91久久久| 77777少妇光屁股久久一区| 亚洲天堂精品在线| 免费91在线视频| 欧美日韩国产在线播放| 亚洲视频免费一区| 欧美日韩性视频在线| 91久久国产婷婷一区二区| 中文字幕视频一区二区在线有码| 国产成人亚洲综合| 亚洲国产成人精品久久久国产成人一区| 成人久久久久久| 久久影视免费观看| 亚洲电影免费观看高清完整版在线| 欧美日韩在线视频观看| 国产成人福利网站| 国产欧美日韩精品专区| 国产欧美中文字幕| 色综合伊人色综合网| 亚洲成人三级在线| 欧美激情精品在线| 亚洲影视九九影院在线观看| 亚洲欧美中文在线视频| 一区二区三区天堂av| 性色av一区二区三区在线观看| 欧美日韩视频在线| 日韩欧美在线国产| 久久这里有精品| 日韩成人在线视频观看| 亚洲综合av影视| 亚洲国产精品va在看黑人| 一区二区在线免费视频| 亚洲午夜国产成人av电影男同| 亚洲色图综合久久| www国产91| 国产成人久久精品| 91精品国产91久久久久| 国产日韩欧美在线| 91伊人影院在线播放| 欧美激情亚洲自拍| 日韩在线小视频| 欧美成人合集magnet| 日韩黄色av网站| 91精品国产91久久久久久| 亚洲欧美色婷婷| 成人国产亚洲精品a区天堂华泰| 欧美最猛黑人xxxx黑人猛叫黄| 久久久亚洲精选| 蜜臀久久99精品久久久久久宅男| 高跟丝袜一区二区三区| 国产日韩精品一区二区| 68精品久久久久久欧美| 2018中文字幕一区二区三区| 亚洲女同精品视频| 亚洲男人7777| 7m第一福利500精品视频| 亚洲成色999久久网站| 少妇高潮久久77777| 国产精品99久久久久久www| 午夜精品一区二区三区在线| 亚洲精品www| 美女av一区二区| 亚洲风情亚aⅴ在线发布| 久久精品久久精品亚洲人| 久久亚洲精品视频| 欧美做受高潮1| 亚洲成人激情在线观看| 亚洲欧美色图片| 91社影院在线观看| 日韩精品一区二区三区第95| 欧美国产日韩一区二区在线观看| 国外成人在线视频| 欧美一区三区三区高中清蜜桃| 亚洲香蕉成视频在线观看| 亚洲精品免费在线视频| 日韩免费在线观看视频| 亚洲精品福利免费在线观看| 久久久久日韩精品久久久男男| 日韩av在线免费播放| 国产一区二区三区视频免费| 久久久999精品| 国产精品欧美一区二区| 欧美成人午夜影院| 日韩成人免费视频| 日韩中文视频免费在线观看| 久久久久久久999精品视频| 国产免费一区视频观看免费| 日韩精品在线影院| 欧美在线视频一二三| 欧美激情一级二级| 日韩欧美精品中文字幕| 国产精品久久久久77777| 日日噜噜噜夜夜爽亚洲精品|