js學(xué)習(xí)筆記(一)

?(一)函數(shù)

1.函數(shù)基本聲明

function fun([參數(shù)1],[參數(shù)2],...){

??? 函數(shù)體;

};

2.函數(shù)表達(dá)式,又叫函數(shù)字面量

var 變量=function([參數(shù)1],[參數(shù)2],...){

??? 函數(shù)體;

};

3.函數(shù)構(gòu)造法,需要new關(guān)鍵字詞

var 變量=new function("參數(shù)1","參數(shù)2",...,函數(shù)體);


(二)對(duì)象、屬性、數(shù)組等

1.

var o={

??? init:function(){

??????? this.bind();

??????? this.popup();

??? },

??? bind:function(){

??????? return "你好";

??? },

??? popup:function(){

??? }

};

//調(diào)用

o.init();

2.

var obj={};

obj.name="yaoyao";

obj['age']=23;

console.log(obj['name']);

console.log(obj['age']);

運(yùn)行結(jié)果:yaoyao

??????? ? ? ? ?? 23

ps:obj['name']等同于obj.name;兩者區(qū)別:其中.是取自身屬性,[]的里面可以是變量

3.

var obj={};

obj.name="yaoyao";

var nameN='name';

console.log(obj.nameN);

console.log(obj.['nameN']);

console.log(obj.[nameN]);//obj.[nameN]==obj.'name'

運(yùn)行結(jié)果: undefined

????????? ? ? ? ? undefined

????????? ? ? ? ? yaoyao

4.刪除屬性;delete

//創(chuàng)建對(duì)象

var obj={};

obj.name="yaoyao";

//刪除屬性

delete obj.name;

console.log(obj['name']);

運(yùn)行結(jié)果:undefined

5.檢測(cè)屬性:in\hasOwnProperty

//創(chuàng)建對(duì)象

var obj={};

obj.name="yaoyao";

obj.age="undefined";

console.log(name in o);//檢測(cè)屬性是否屬于當(dāng)前對(duì)象,運(yùn)算符in

console.log(obj.hasOwnProperty('name'));//檢測(cè)屬性,運(yùn)算符hasOwnProperty

console.log(obj.name!=undefined);//檢測(cè)屬性

console.log(obj.age!=undefined);

運(yùn)行結(jié)果: true

???????? ? ? ? ?? true

????????? ? ? ??? true

????????? ?? ? ?? false

6.對(duì)象遍歷、枚舉屬性

var o={//對(duì)象

??? x:1,

??? y:2,

??? z:3

};

//數(shù)組對(duì)象

var arr=[{x:1},{y:2},{z:3}];

for(a in o){? //a是變量,for in遍歷出key

console.log(a);

}

for(a in o){? //a是變量,for in遍歷出value

console.log(o[a]);

}

for(a in arr){? //a是變量,for in遍歷出數(shù)組的索引

console.log(a);

}

運(yùn)行結(jié)果: x

?????????? y

?????????? z

?????????? 1

?????????? 2

?????????? 3

?????????? 0

?????????? 1

?????????? 2

7.數(shù)組循環(huán)

var arr=new Array();

arr=[1.6,5,3,5,33];

for(var i=0;i

}

$.each(arr,function(index,item){//方法二,異步

})

8.序列化對(duì)象

ps:? 深拷貝和淺拷貝的區(qū)別:深拷貝--類似雙胞胎是兩個(gè)獨(dú)立的個(gè)體;淺拷貝--也就是引用,類似人和自己的影子對(duì)象數(shù)組都是淺拷貝。

ps:? 數(shù)據(jù)交互的數(shù)據(jù)類型是json\xml字符串等,不能是對(duì)象,所以要想傳送對(duì)象給服務(wù)器,需要序列化對(duì)象

var o={//對(duì)象

??? x:1,

??? y:2,

??? z:3

};

console.log(JSON.stringify(o));//對(duì)象轉(zhuǎn)換成字符串--stringify

console.log(typeof(JSON.stringify(o));//檢測(cè)數(shù)據(jù)類型

var str=JSON.stringify(o);//把字符串轉(zhuǎn)換成對(duì)象--parse

console.log(typeof(JSON.parse(str));//JSON.parse(str)是深拷貝,類似雙胞胎是兩個(gè)獨(dú)立的個(gè)體? (淺拷貝,也就是引用,類似人和自己的影子)

var 02={

??? x:1,

??? y:2,

??? z:3

}

var p=02;

o2.x='111';//淺拷貝--引用,隨之改變

console.log(p);

運(yùn)行結(jié)果:

??????? {"x":1,"y":2,"z":3}

??????? string

??????? object

??????? {x:"111",y:2,z:3}

9.jq的ajax實(shí)例

?$().ready(function () {

??????? $('#Login').click(function () {

??????????? if ($('#username').val() == "" || $('#password').val() == "") {

??????????????? alert("用戶名或密碼不能為空!");

??????????? }

??????????? else {

??????????????? $.ajax({

??????????????????? type: "POST",

??????????????????? url: "Ajax/LoginHandler.ashx",

??????????????????? data: "username=" + escape($('#username').val()) + "&password=" + escape($('#password').val()),

??????????????????? beforeSend: function () {

??????????????????????? $("#loading").css("display", "block"); //點(diǎn)擊登錄后顯示loading,隱藏輸入框

??????????????????????? $("#login").css("display", "none");

??????????????????? },

??????????????????? success: function (msg) {

??????????????????????? $("#loading").hide(); //隱藏loading

??????????????????????? if (msg == "success") {

??????????????????????????? //parent.tb_remove();

??????????????????????????? parent.document.location.href = "admin.htm"; //如果登錄成功則跳到管理界面

??????????????????????????? parent.tb_remove();

??????????????????????? }

??????????????????????? if (msg == "fail") {

??????????????????????????? alert("登錄失敗!");

??????????????????????? }

??????????????????? },

??????????????????? complete: function (data) {

??????????????????????? $("#loading").css("display", "none"); //點(diǎn)擊登錄后顯示loading,隱藏輸入框

??????????????????????? $("#login").css("display", "block");

??????????????????? },

??????????????????? error: function (XMLHttpRequest, textStatus, thrownError) {

??????????????????? }

??????????????? });

??????????? }

??????? });

??? });

10.判斷arr數(shù)組對(duì)象里面是否有a---hasOwnProperty()

var arr=[{a:1,q:2,w:3},{d:1,r:2,c:3},{t:1,v:2,z:3}];

for(var i=0;i

??? if(arr[i].hasOwnProperty('a')){//hasOwnProperty檢測(cè)arr里main是否存在a

?????? console.log('yes');

?????? break;//跳出當(dāng)前循環(huán)

???? }else{

?????? console.log('no');

???? }

}

$.each(arr.function(index,item){//此時(shí)的item是對(duì)象

??? if(item.hasOwnProperty('a')){

?????? console.log('yes');???? ?

???? }else{

?????? console.log('no');

???? }

})

$.each(arr.function(index,item){//index是索引,此時(shí)的item是對(duì)象

??? if(item.a!=undefined){

?????? console.log('yes');???? ?

???? }else{

?????? console.log('no');

???? }

})

運(yùn)行結(jié)果: yes

??????? ? ? ? ? ? yes

??????? ? ? ? ? ? yes

(三)


1.原型--prototype(原型屬性)

ps: 每個(gè)函數(shù)都有一個(gè)原型屬性,在此原型屬性中都有一個(gè)構(gòu)造(constructor)函數(shù),原型里面所共有的屬性對(duì)象實(shí)例化也有。

function Person(){

};

Person.prototype.name='yaoyao';

Person.prototype.age=22;

Person.prototype.action=function(){

??? console.log(this.name);//該this指當(dāng)前實(shí)例化的對(duì)象,并不是原型

};

var person1=new Person();

person1.name='ben';//局部改變

var person2=new Person();

console.log(person2.age);//輸出22

person1.__proto__.age=30;//通過__proto__改變age屬性值,全局發(fā)生了變化,全局age就等于30

console.log(person1.name);//輸出ben

console.log(person2.name);//輸出yaoyao

console.log(person2.age);//輸出30

console.log(person2);//輸出:Person {}

???????????????????????????????? __proto__:

?????????????????????????????????? action:?()

?????????????????????????????????? age:30

?????????????????????????????????? name:"liangxue"

?????????????????????????????????? constructor:? Person()

?????????????????????????????????? __proto__:Object

console.log(Person.prototype.isPrototypeOf(person2));//輸出true--檢測(cè)當(dāng)前實(shí)例person2是否屬于該原型

2.構(gòu)造函數(shù)和原型混合使用

(1)單純使用構(gòu)造函數(shù)時(shí)(當(dāng)需要多個(gè)實(shí)例時(shí)就得new多個(gè),會(huì)導(dǎo)致性能變差,內(nèi)存溢出,所以需要使用原型)

//構(gòu)造函數(shù)

function Aa(name,age){

??? this.name=name;

??? this.age=age;

??? this.action=function(){

??????? return this.name;

??? }

};

var aa=new Aa('yaoyao',24);

var bb=new Aa('sushan',24);

console.log(aa.name);//輸出yaoyao

(2)結(jié)合原型使用

//構(gòu)造函數(shù)

function Aa(name,age,hobby){

??? this.name=name;

??? this.age=age;

??? this.hobby=hobby; ?

};

//原型--不會(huì)因?yàn)閷?shí)例化多個(gè)而變化

Aa.prototype.action=function(){

??? return '名字:'+this.name+',年齡:'+this.age+',愛好:'+this.hobby;

};

var aa=new Aa('yaoyao',24,'唱歌');

var bb=new Aa('sushan',24,'跳舞');

console.log(bb.action());//輸出--名字:sushan,年齡:24,愛好:跳舞

3.繼承(先繼承代溝最小的,依次往后)

(1)

function Anima(){}

Anima.prototype.canDo=function(){

??? console.log("吃飯睡覺");

}

function Cat(){}

Cat.prototype=new Anima();//Cat繼承Anima

var cat=new Cat();//cat不僅擁有Anima里面的也擁有Cat里面的。

cat.canDo();//輸出:吃飯睡覺

function Dog(){

??? this.canDo=function(){

??????? console.log("吃狗糧");

??? }

}

Dog.prototype=new Anima();//Dog繼承Anima

var dog=new Dog();

dog.canDo();//輸出:吃狗糧

cat1.canDo=function(){

console.log("貓吃魚");

};

cat1.canDo();//輸出:貓吃魚

(2)

function Fa(){}

Fa.prototype.name="fa";

Fa.prototype.age=23;

function Fb(){};

Fb.prototype=new Fa();

Fb.prototype.name="fb";

Fb.prototype.age=24;

function Fc(){};

Fc.prototype=new Fb();

Fc.prototype.name="fc";

var fc=new Fc();

console.log(fc.name);//輸出fc

fc.__proto__.name="fcc";//當(dāng)前有name,改變當(dāng)前

console.log(fc.name);//輸出fcc

console.log(fc.age);//輸出24,改變前

fc.__proto__.age=25;//當(dāng)前沒有age,改變有age且代溝最小的父類Fb

console.log(fc.age);//輸出25

var fa=new Fa();

console.log(fa.age);//輸出23,未被改變

4.有參數(shù)時(shí)的構(gòu)造函數(shù)、原型、繼承

function ParentType(name,age){

??? this.name=name;

??? this.age=age;

};

ParentType.prototype.getParentName=function(){

??? return this.name;

}

function SonType(){

ParentType.call(this,"yaoyao",23);//子類調(diào)用父類并傳參,也可以使用apply(),作用都是在一個(gè)對(duì)象中調(diào)用另一個(gè)對(duì)象,區(qū)別在于所傳參數(shù)call(this,name,age)??? apply(this,數(shù)組)。

??? this.name='yy';

};

SonType.prototype=new ParentType();

SonType.prototype.getSonName=function(){

??? return this.name;

};

var aa=new SonType();

console.log(aa.name);//輸出yy,如果實(shí)例化里有name先取實(shí)例化的

console.log(aa.age);//輸出23


(四)作用域、閉包、遞歸、this關(guān)鍵字


1.作用域---當(dāng)前所在區(qū)域,大可分為全局作用域、局部作用域

var x="123";

function aa(){

??? var a='1';

}

function bb(){

??? var b='2';

??? console.log(b);//局部

??? console.log(x); //全局 ?

}

bb();//輸出2

?????????? 123

2.閉包--內(nèi)部和外部的函數(shù)聯(lián)系橋梁

(1)

?var x="s1";

?function aa(){

???? var x="s2";

???? function son(){

???????? var x="s3";

???????? return x;

???? };

???? return son();

?};

?console.log(aa());//輸出:s3

(2)

var x="s1";

?function aa(){

???? var x="s2";

???? return function son(){

???????? var x="s3";

???????? return x;

???? };? ?

?};

?console.log(aa());//輸出:? ? son(){

?????????????????????????????????? var x="s3";

?????????????????????????????????? return x;

????????????????????????????????? }

?console.log(aa()());//輸出:s3

(3)

?var fun=(function aa(){

???? var x="s2";

???? return function son(){

???????? var x="s3";

???????? return x;

???? };? ?

?}());

?console.log(fun());//輸出s3

3.遞歸

(1)

?function setup(x){

???? var i=0;

???? return function(){

???????? return x[i++];

???? }

?}

?var next=setup(['a','b','c']);

?console.log(next());//輸出a

?console.log(next());//輸出b

?console.log(next());//輸出c

(2)

var fun= (function setup(x){

??? var i=0;

??? return function(){

??????? return x[i++];

??? }

}(['a','b','c']));

console.log(fun());//輸出a

console.log(fun());//輸出b

console.log(fun());//輸出c

4.this關(guān)鍵字---指當(dāng)前調(diào)用函數(shù)的對(duì)象(函數(shù)的擁有者)

(1)函數(shù)中引用

var x=1;

function test(){

??? this.x;//指向window.x

};

test();

console.log(x);//輸出1

-----------------

var x=1;

function test(){

??? this.x=0;//指向window.x

};

test();

console.log(x);//輸出0

-----------------

var x=1;

function test(){

??? this.x=0;//指向window.x

};

function test1(){

??? this.x=1;//指向window.x

};

test();

test1();

console.log(x);//輸出1,根據(jù)執(zhí)行順序

(2)對(duì)象中調(diào)用

var o={};//創(chuàng)建對(duì)象

o.a=1;

o.action=function(){

??? return this.a;//this指向o對(duì)象

}

console.log(o.action());//輸出1

--------------------

對(duì)象中調(diào)用外部函數(shù)

function test(){

??? return this.a;//this指向o對(duì)象

}

var o={};//創(chuàng)建對(duì)象

o.a=1;

o.action=test;

console.log(o.action());//輸出1

--------------------

ps: 改變this指向,可以用call(),appy(),用于在當(dāng)前對(duì)象中調(diào)用其他對(duì)象,兩者區(qū)別在于傳參不同,appy(this,[])傳的是數(shù)組;call(this,age,name);

var a="111";

function test(){

??? return this.a;//this指向o對(duì)象

}

var o={};//創(chuàng)建對(duì)象

o.a=1;

o.b=test;

console.log(o.b.call());//輸出111,call()未傳參,此時(shí)this指向window中的a

console.log(o.b.call(o));//輸出1,call()傳o對(duì)象,此時(shí)this指向o中的a

(3)構(gòu)造函數(shù)調(diào)用

function Fun(name,age){

??? this.name=name;

??? this.age=age;

}

var fun=new Fun("yaoyao",24);

console.log(fun.name);//輸出yaoyao

(4)this指向----面試題

ps:? 函數(shù)自執(zhí)行? this指向window

var a=1;

var o={

??? a:2,

??? showA:function(){

??????? this.a=3;

??????? (function(){//閉包,自調(diào)

??????????? console.log(this.a);//指向window中的a,輸出1

??????? })();

??????? console.log(this.a);//指向當(dāng)前對(duì)象的a,輸出3

??? }

}

o.showA();

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,132評(píng)論 0 2
  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡(jiǎn)單...
    舟漁行舟閱讀 8,110評(píng)論 2 17
  • 單例模式 適用場(chǎng)景:可能會(huì)在場(chǎng)景中使用到對(duì)象,但只有一個(gè)實(shí)例,加載時(shí)并不主動(dòng)創(chuàng)建,需要時(shí)才創(chuàng)建 最常見的單例模式,...
    Obeing閱讀 2,311評(píng)論 1 10
  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,506評(píng)論 0 13
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,894評(píng)論 0 13

友情鏈接更多精彩內(nèi)容