中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

JavaScript基礎知識點歸納(推薦)
來源:易賢網 閱讀:1110 次 日期:2016-07-25 14:56:16
溫馨提示:易賢網小編為您整理了“JavaScript基礎知識點歸納(推薦)”,方便廣大網友查閱!

定義在函數外的變量一定是全局變量;定義在函數內的變量,如果聲明了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工廠方法創建對象object1

var object2 = createObject();//調用createObject工廠方法創建對象object2

object1.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()

瀏覽器將會打印:zhangsan,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基礎知識點歸納(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考

更多信息請查看網絡編程
易賢網手機網站地址:JavaScript基礎知識點歸納(推薦)
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美一区二区三区影视| 欧美福利一区二区| 国产在线精品不卡| 韩国欧美国产1区| 精品无人区卡一卡二卡三乱码免费卡| 日本午夜精品视频在线观看 | 91福利精品视频| 99精品国产视频| 99国产欧美久久久精品| 91片黄在线观看| 欧美天天综合网| 制服丝袜亚洲色图| 日韩一区二区三区四区| 精品久久久久香蕉网| 国产欧美va欧美不卡在线| 中文av字幕一区| 亚洲一区二区偷拍精品| 视频一区二区三区入口| 免费看欧美女人艹b| 久久99国产精品久久| 国产aⅴ精品一区二区三区色成熟| 不卡一卡二卡三乱码免费网站| 91免费看`日韩一区二区| 欧美日韩综合在线| 精品国产伦一区二区三区观看方式 | 国产成人免费在线观看不卡| 国产91丝袜在线播放| 91黄色免费看| 欧美mv日韩mv亚洲| 中文字幕一区二区三区在线不卡| 亚洲一区av在线| 麻豆成人久久精品二区三区红| 丰满少妇久久久久久久| 欧美午夜在线观看| 久久伊99综合婷婷久久伊| 一区二区中文视频| 久久国产综合精品| 色av一区二区| 久久九九国产精品| 三级不卡在线观看| 97精品久久久久中文字幕 | 精品久久久网站| 亚洲国产美国国产综合一区二区| 国产一区二区三区免费| 精品视频全国免费看| 欧美极品少妇xxxxⅹ高跟鞋| 日韩在线播放一区二区| 91影院在线免费观看| 久久综合九色综合欧美就去吻| 亚洲一区在线电影| 成人av网站在线观看免费| 精品久久99ma| 亚洲第一会所有码转帖| 99国产精品99久久久久久| 欧美成人猛片aaaaaaa| 天天综合色天天综合| gogogo免费视频观看亚洲一| 久久久精品黄色| 奇米一区二区三区| 欧美精品乱码久久久久久按摩| 亚洲另类中文字| 99久久国产综合精品色伊| 国产性色一区二区| 国模冰冰炮一区二区| 欧美大度的电影原声| 免费在线一区观看| 欧美一级欧美三级| 日韩av成人高清| 91精品国产综合久久精品麻豆| 亚洲国产日韩a在线播放| 欧洲一区在线电影| 亚洲激情网站免费观看| 色婷婷av久久久久久久| 亚洲精品老司机| 欧美优质美女网站| 夜夜嗨av一区二区三区| 欧美日韩国产在线播放网站| 亚洲国产日韩a在线播放| 欧美日韩激情一区二区| 日日欢夜夜爽一区| 欧美刺激午夜性久久久久久久| 乱中年女人伦av一区二区| 日韩欧美一级在线播放| 国产自产高清不卡| 日本一区二区免费在线观看视频| 成人18视频日本| 亚洲精品国产视频| 欧美日本在线播放| 黄色日韩三级电影| 日本一区二区三区电影| 色乱码一区二区三区88| 秋霞av亚洲一区二区三| 久久九九久久九九| 91免费看视频| 蜜桃视频在线一区| 国产拍欧美日韩视频二区| 色诱亚洲精品久久久久久| 午夜日韩在线观看| 久久综合久久综合九色| 色呦呦国产精品| 免费成人美女在线观看.| 国产亚洲欧美在线| 在线看不卡av| 狠狠色2019综合网| 一二三区精品福利视频| xfplay精品久久| 91视频xxxx| 精品一区二区三区蜜桃| 亚洲欧美视频在线观看视频| 欧美二区三区91| 成人动漫视频在线| 欧美aa在线视频| 亚洲人妖av一区二区| 777欧美精品| 成人app软件下载大全免费| 全国精品久久少妇| 亚洲精品视频观看| 国产三级三级三级精品8ⅰ区| 在线视频你懂得一区二区三区| 久久99精品一区二区三区三区| 一区2区3区在线看| 国产欧美精品一区aⅴ影院| 91精品国产91久久久久久一区二区 | 国产麻豆精品久久一二三| 亚洲激情男女视频| 久久久精品欧美丰满| 日韩欧美第一区| 欧美日韩一区久久| caoporm超碰国产精品| 国产精品一区在线观看乱码| 亚洲最大成人综合| 亚洲天堂免费在线观看视频| 国产午夜三级一区二区三| 日韩精品中文字幕一区| 欧美精品v日韩精品v韩国精品v| 91麻豆国产在线观看| 国产精品中文字幕日韩精品 | 婷婷开心激情综合| 亚洲资源在线观看| 亚洲免费在线视频| 日韩一区在线播放| 中文字幕乱码久久午夜不卡| 久久久精品综合| 精品国产髙清在线看国产毛片| 欧美美女一区二区| 欧美三级欧美一级| 欧美色中文字幕| 欧美日韩一区二区三区视频 | xvideos.蜜桃一区二区| 日韩精品一区二区三区视频 | 制服丝袜国产精品| 欧美另类一区二区三区| 91精品久久久久久久久99蜜臂| 欧美日韩一区二区电影| 欧美日韩mp4| 91精品国产综合久久久久久漫画| 欧美精品在线观看一区二区| 欧美日韩国产小视频在线观看| 91精品蜜臀在线一区尤物| 欧美一二区视频| 久久久久久久久一| 国产精品成人网| 艳妇臀荡乳欲伦亚洲一区| 午夜精品福利久久久| 日本aⅴ精品一区二区三区| 国内成+人亚洲+欧美+综合在线| 国产精品18久久久久久久网站| 国产激情精品久久久第一区二区 | 国产一区二区免费视频| 国产酒店精品激情| 色综合色狠狠天天综合色| 欧美性淫爽ww久久久久无| 91精品啪在线观看国产60岁| 精品国产欧美一区二区| 国产精品视频第一区| 亚洲成人午夜影院| 国产一本一道久久香蕉| av资源站一区| 91精品国产综合久久久久久漫画 | 国产精品人人做人人爽人人添| 亚洲综合视频在线观看| 视频一区二区三区中文字幕| 国产精品一区在线观看乱码| 色综合久久久久综合99| 欧美成人a在线| 一区二区三区中文字幕电影| 久久91精品国产91久久小草| 99精品视频在线观看| 欧美一区二区二区| 亚洲色欲色欲www| 韩国毛片一区二区三区| 欧洲一区二区三区在线| 久久久久国产精品麻豆| 天堂在线亚洲视频| 国产91精品一区二区麻豆亚洲| 91精品在线麻豆| 中文字幕一区二区三区av| 狠狠网亚洲精品| 91精品免费在线观看| 亚洲一区二区三区四区在线 |