2019-05-28

Javascript使用

[if !supportLists]一、????? [endif]JS的三種使用方式

[if !supportLists]1、????????[endif]行內(nèi):寫在html標(biāo)簽中的js代碼中

[if !supportLists]2、????????[endif]內(nèi)部:寫在寫在<script type="text/javascript"></script>標(biāo)簽之間可以放在html中的任意位置,一般放在<head>標(biāo)簽中或<body>標(biāo)簽中或<body>標(biāo)簽后;

3、?? 外部:引入外部的js文件

<script type="text/javascript"

src="js文件的路徑"

></script>

注:如果<script>標(biāo)簽中設(shè)置了src屬性,name寫在<script>雙標(biāo)簽中的js代碼無(wú)效;

[if !supportLists]二、????? [endif]變量和注釋

[if !supportLists]1、????????[endif]語(yǔ)句(statment)是為了完成某種任務(wù)進(jìn)行的操作,語(yǔ)句分號(hào)結(jié)尾;

[if !supportLists]2、????????[endif]多個(gè)語(yǔ)句可以寫在一行,但是不建議這么寫;

[if !supportLists]3、????????[endif]表達(dá)式不需要分號(hào)結(jié)尾,一旦表達(dá)式后面添加分號(hào),則JavaScript引擎會(huì)將表達(dá)式視為語(yǔ)句,這樣會(huì)產(chǎn)生一些沒(méi)有任何意義的語(yǔ)句;

[if !supportLists]4、????????[endif]所有的變量都通過(guò)“var”聲明;

[if !supportLists]5、????????[endif]注釋://單行注釋;/*多行注釋*/。

[if !supportLists]三、????? [endif]變量的聲明

[if !supportLists]1、????????[endif]js是一種弱類型語(yǔ)言,聲明時(shí)不需要指定數(shù)據(jù)類型,直接通過(guò)var修飾符聲明;

[if !supportLists]2、????????[endif]先聲明再賦值,或者聲明并賦值;

[if !supportLists]3、????????[endif]如果聲明變量時(shí)不適用var修飾,則該變量是全局變量;

[if !supportLists]4、????????[endif]變量的注意點(diǎn):a、若是聲明沒(méi)有賦值,則該變量的值為undefined;

b、變量要有定義才能使用,若未聲明使用,js報(bào)錯(cuò),告訴你變量沒(méi)有定義;

c、可以在同一條var中聲明多個(gè)變量;

e、若使用var重新聲明已經(jīng)存在的變量,是無(wú)效的;

f、若使用var重新聲明已經(jīng)存在的變量且賦值,則會(huì)覆蓋掉前面的值;

g、js是一種動(dòng)態(tài)類型、弱類型的語(yǔ)言,也就是說(shuō),變量的類型沒(méi)有限制。

5、變量提升

Js引擎的工作方式,先解析代碼,獲取所有的被聲明變量,然后再一行一行地運(yùn)行,結(jié)果所有的變量的聲明語(yǔ)句都會(huì)提升到代碼的頭部。

[if !supportLists]四、????? [endif]數(shù)據(jù)類型

Js中有6種數(shù)據(jù)類型,其中有5種簡(jiǎn)單數(shù)據(jù)類型

1、Undefined:?? 表示未定義或者不存在,即此處目前沒(méi)有任何值;

2、Null: 表示空缺,即此處應(yīng)該有一個(gè)值,但目前為空;

3、布爾值(Boolean):true和false兩個(gè)特定值;

4、字符串(string):字符組成的文本;

5、數(shù)值(Number):整數(shù)和小數(shù);

6、對(duì)象(object)(引用):各種值組成的集合

1)、對(duì)象object,{name:”zhangsan”,age:”18”}

2)、數(shù)組,(array)[1,2,3]

3)、函數(shù),(function)function test() {}

操作符typeof

Typeof操作符用來(lái)檢測(cè)數(shù)據(jù)類型。

說(shuō)明:1、typeof null 返回的是 object 字符串

2、函數(shù)不是數(shù)據(jù)類型,但是也可以使用 typeof 操作符返回字符串。

3、type操作符可以操作變量,也可以操作字面量;

4、函數(shù)在js中是對(duì)象,不是數(shù)據(jù)類型,所以使用typeof區(qū)分function和object是必要的;

????? Undefined

[if !supportLists]1、????????[endif]undefined類型的值是undefined;

[if !supportLists]2、????????[endif]undefined是一個(gè)表示“無(wú)”的原始值,表示值不存在;

[if !supportLists]3、????????[endif]當(dāng)聲明了一個(gè)變量而沒(méi)有初始化時(shí),這個(gè)變量值就是undefined;

[if !supportLists]4、????????[endif]當(dāng)函數(shù)需要形參,但未傳遞實(shí)參時(shí),值就是undefined;

[if !supportLists]5、????????[endif]當(dāng)函數(shù)沒(méi)有返回值,但定義了變量接受時(shí),值就是undefined。

Null

[if !supportLists]1、????????[endif]null類型是只有一個(gè)值得數(shù)據(jù)類型,它表示空值,即該處的值為空;

[if !supportLists]2、????????[endif]null表示一個(gè)空對(duì)象的引用;

[if !supportLists]3、????????[endif]使用typeof操作符測(cè)試null,返回object字符串;

[if !supportLists]4、????????[endif]Undefined派生自null,所有等值比較返回值是true,所有未初始化的變量,和賦值為null的變量相等。

數(shù)值型(整型和浮點(diǎn)型)

? 1、所有數(shù)字都是以64位浮點(diǎn)數(shù)形式儲(chǔ)存的,所有js中1和1.0相等;

2、1加1.0得到的還是整數(shù),浮點(diǎn)數(shù)最高精度是17位小數(shù),由于浮點(diǎn)數(shù)運(yùn)算不精確,所有盡量不適用;

? 3、對(duì)于過(guò)大和過(guò)小的數(shù)值,可以使用科學(xué)計(jì)數(shù)法來(lái)表示;

? 4、超過(guò)數(shù)據(jù)范圍,出現(xiàn)Infinity(正無(wú)窮)或者-Infinity(負(fù)無(wú)窮)

5、isFinite()函數(shù)可以確定是否超出范圍;(true沒(méi)有超出,false超出了)

? 6、NaN表示非數(shù)值(Not a Number),是一個(gè)特殊的值;

? 注意:NaN不等于任何值,包括它本身,因?yàn)樗皇且粋€(gè)值

?????? NaN與任何數(shù)包括它自己的運(yùn)算,得到的都是NaN

isNaN()可以用來(lái)判斷一個(gè)值是否為NaN,true不是數(shù)字,false是數(shù)字;

對(duì)象

? Instanceof運(yùn)算符:typeof操作符對(duì)數(shù)組和對(duì)象的顯示結(jié)果都是object,那么可以利用instanceof運(yùn)算符來(lái)判斷一個(gè)變量是否是某個(gè)對(duì)象的實(shí)例;


[if !supportLists]五、????? [endif]類型轉(zhuǎn)換

[if !supportLists]1、????????[endif]自動(dòng)類型轉(zhuǎn)換

[if !supportLists]2、????????[endif]函數(shù)轉(zhuǎn)換

parseInt()在轉(zhuǎn)換前分析該字符串,判斷位置0處的字符串,判斷它是否是個(gè)有效數(shù)字,如果不是,則直接返回 NaN,不再繼續(xù),如果是則繼續(xù),直到找到非字符。

parseInt()方法的基模式,可以把二進(jìn)制,八進(jìn)制、十六進(jìn)制或其他任何進(jìn)制的字符串轉(zhuǎn)換成整數(shù)?;怯?parseInt()方法的第二個(gè)參數(shù)指定的。

如果十進(jìn)制數(shù)包含前導(dǎo) 0,那么最好采用基數(shù) 10,這樣才不會(huì)意外地得到八進(jìn)制的值。

[if !supportLists]3、????????[endif]顯示轉(zhuǎn)換

toString()函數(shù)將內(nèi)容轉(zhuǎn)換為字符串形式,可以將數(shù)字以指定的進(jìn)制轉(zhuǎn)換成字符串,默認(rèn)為十進(jìn)制。

Number 還提供了 toFixed()函數(shù)將根據(jù)小數(shù)點(diǎn)后指定位數(shù)將數(shù)字轉(zhuǎn)為字符串,四舍五入。

[if !supportLists]4、????????[endif]強(qiáng)制轉(zhuǎn)換

JS 為 Number、Boolean、String 對(duì)象提供了構(gòu)造方法,用于強(qiáng)制轉(zhuǎn)換其他類型的數(shù)據(jù)。此時(shí)操作的是整個(gè)數(shù)據(jù),而不是部分。

[if !supportLists]六、????? [endif]數(shù)組

特點(diǎn):數(shù)組長(zhǎng)度可變,數(shù)組里面的類型可以不一樣,不存在下標(biāo)越界。

[if !supportLists]1、????????[endif]數(shù)組的定義

1、隱式創(chuàng)建???????? var變量名 = [值1,值2,...];

?? 2、直接實(shí)例化

?? var變量名 = new Array(值1,值2,...);

?? 3、實(shí)例化并指定長(zhǎng)度

?? var變量名 = new Array(size);


?? 獲取數(shù)組的長(zhǎng)度數(shù)組.length

[if !supportLists]2、????????[endif]數(shù)組的遍歷

1、普通 for 循環(huán)遍歷? for(var i = 0; i <數(shù)組名.length; i++) {

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

?? 注:可以拿到undefinded的值,無(wú)法獲取數(shù)組中屬性對(duì)應(yīng)的值

2、for ... in

?? for(vari in數(shù)組) {

?????????????????????????????? //i是下標(biāo)或?qū)傩悦?/p>

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

?? 注:無(wú)法拿到undefinded的值,可以獲取數(shù)組中屬性對(duì)應(yīng)的值


?? 3、foreach

?? 數(shù)組.foreach(function(element,index){

???????? //element:元素;index:下標(biāo)

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

注:無(wú)法獲取屬性對(duì)應(yīng)的值與undefinded的值


* for --?不遍歷屬性

* foreach -- 不遍歷屬性和索引中的 undefined

* for in -- 不遍歷索引中的 undefined


[if !supportLists]3、????????[endif]數(shù)組提供的方法

push 添加元素到最后

unshift 添加元素到最前

pop 刪除最后一項(xiàng)

shift 刪除第一項(xiàng)

reverse 數(shù)組翻轉(zhuǎn)

join 數(shù)組轉(zhuǎn)成字符串

indexOf 數(shù)組元素索引

slice 截?。ㄇ衅?shù)組,原數(shù)組不發(fā)生變化

splice 剪接數(shù)組,原數(shù)組變化,可以實(shí)現(xiàn)前后刪除效果

concat 數(shù)組合并

[if !supportLists]七、????? [endif]函數(shù)

函數(shù)即方法,函數(shù)也是對(duì)象。

[if !supportLists]1、????????[endif]函數(shù)的定義方式

1)函數(shù)聲明語(yǔ)句:function? 函數(shù)名([形參]){? }

? 調(diào)用:函數(shù)名([實(shí)參]);

?????????? 2)函數(shù)定義表達(dá)式:

???????????????? Var變量名/函數(shù)名=function([形參]){? }

?????????? 調(diào)用:變量名([實(shí)參])/函數(shù)名([實(shí)參]);

?????????? 3)Function構(gòu)造函數(shù)

???????????????? var函數(shù)名 = new Function('參數(shù)1','參數(shù)2','函數(shù)的主體內(nèi)容');

?????????? 調(diào)用:函數(shù)名([實(shí)參]);

?????????? 注:構(gòu)造函數(shù)的最后一個(gè)參數(shù)是函數(shù)體。

[if !supportLists]2、????????[endif]注意

js 中的函數(shù)沒(méi)有重載,同名的函數(shù),會(huì)被后面的函數(shù)覆蓋。

js 中允許有不定數(shù)目的參數(shù),后面介紹 arguments 對(duì)象。

[if !supportLists]3、????????[endif]函數(shù)的參數(shù)、調(diào)用和return

1)參數(shù): 函數(shù)運(yùn)行的時(shí)候,有時(shí)需要提供外部數(shù)據(jù),不同的外部數(shù)據(jù)會(huì)得到不同的結(jié)果,這種外部數(shù)據(jù)就叫參數(shù),定義時(shí)的參數(shù)稱為形參,調(diào)用時(shí)的參數(shù)稱為實(shí)參。

1、實(shí)參可以省略,那么對(duì)應(yīng)形參為 undefined

?2、若函數(shù)形參同名(一般不會(huì)這么干):在使用時(shí)以最后一個(gè)值為準(zhǔn)。

?3、可以給參數(shù)默認(rèn)值:當(dāng)參數(shù)為特殊值時(shí),可以賦予默認(rèn)值。

?4、參數(shù)為值傳遞,傳遞副本;引用傳遞時(shí)傳遞地址,操作的是同一個(gè)對(duì)象

2)函數(shù)的調(diào)用

常用的調(diào)用方式:函數(shù)名([實(shí)參]);

存在返回值可以變量接收,若接收無(wú)返回值函數(shù)則為 undefined。

函數(shù)調(diào)用模式:var fn9 =

function() {

????????????? console.log(this);// Window對(duì)象

????????????? return1;

???????? }

???????? varf = fn9();

???????? console.log(f);


方法調(diào)用模式:var obj = {

????????????? uname:"zhangsan",

????????????? uage:18,

????????????? cats:["喵喵","貓貓"],

????????????? sayHello:function(){

??????????????????? console.log(this);// obj對(duì)象

??????????????????? console.log("你好呀~");

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

???????? };

???????? console.log(obj.sayHello);

???????? obj.sayHello();

間接調(diào)用:function fn10(x,y) {

??????????????? console.log(x+y);

??????????????? console.log(this);

????????? }

????????? fn10(1,2); //? Window對(duì)象


????????? fn10.call(); //? Window對(duì)象

注意:apply傳入的是一個(gè)參數(shù)數(shù)組,也就是將多個(gè)參數(shù)組合成為一個(gè)數(shù)組傳入,而call則作為call的參數(shù)傳入(從第二個(gè)參數(shù)開(kāi)始)。如func.call(func1,var1,var2,var3)對(duì)應(yīng)的apply寫法為:func.apply(func1,[var1,var2,var3])

3)return語(yǔ)句

函數(shù)的執(zhí)行可能會(huì)有返回值,需要使用 return 語(yǔ)句將結(jié)果返回。return 語(yǔ)句不是必需的

如果沒(méi)有的話,該函數(shù)就不返回任何值,或者說(shuō)返回 undefined。

作用:在沒(méi)有返回值的方法中,用來(lái)結(jié)束方法。

有返回值的方法中,一個(gè)是用來(lái)結(jié)束方法,一個(gè)是將值帶給調(diào)用者。

[if !supportLists]八、????? [endif]arguments對(duì)象和函數(shù)的方法及屬性

arguments 對(duì)象可以得到函數(shù)的實(shí)參數(shù)量

函數(shù)名.name

函數(shù)名.length()得到函數(shù)的形參數(shù)量

函數(shù)名.toString()得到函數(shù)的源碼

[if !supportLists]九、????? [endif]函數(shù)的作用域

函數(shù)的作用域:全局(global

variable)和局部(local

variable)

1)全局變量與局部變量同名問(wèn)題

2)在函數(shù)中定義變量時(shí),若沒(méi)有加 var 關(guān)鍵字,使用之后自動(dòng)變?yōu)槿肿兞?/p>

3)變量作用域提升

十、閉包

????? 閉包的形成:

???????????????? 1、外部函數(shù)內(nèi)部嵌套內(nèi)部函數(shù)

???????????????? 2、內(nèi)部函數(shù)中使用外部函數(shù)的環(huán)境

???????????????? 3、外部函數(shù)返回內(nèi)部函數(shù)

????? 閉包的作用:

???????????????? 1、獲取函數(shù)內(nèi)部的變量

???????????????? 2、保存變量的值在內(nèi)存中

???????????????? 3、避免變量名重復(fù)


十一、內(nèi)置對(duì)象

????? Date:

//獲取

???????????????? ? getFullYear()年, getMonth()月, getDate()日,

???????????????? ? getHours()時(shí),getMinutes()分,getSeconds()秒

???????????????? //設(shè)置

???????????????? setYear(), setMonth(), …

???????????????? toLoacaleString()

???????????????? 說(shuō)明:

???????????????? 1.getMonth():得到的值:0~11(1 月~12 月)

???????????????? 2.setMonth():設(shè)置值時(shí) 0~11

???????????????????????????? ?3.toLocaleString():可根據(jù)本地時(shí)間把 Date 對(duì)象轉(zhuǎn)換為字符串,并返回結(jié)果。

十二、JS對(duì)象

????????? JS中一切數(shù)據(jù)皆是對(duì)象

[if !supportLists]1)????????[endif]定義對(duì)象

[if !supportLists]1、????????[endif]字面量形式創(chuàng)建對(duì)象

Var 變量名={? }//空對(duì)象

Var 變量名={鍵:值,······}

[if !supportLists]2、????????[endif]通過(guò)new Object對(duì)象創(chuàng)建

Var 變量名=new Object();

[if !supportLists]3、????????[endif]通過(guò)Object對(duì)象的creat方法創(chuàng)建對(duì)象

Var變量名=Object.create(null或?qū)ο?;

[if !supportLists]2)????????[endif]對(duì)象的序列化和反序列化

序列化即將 JS 對(duì)象序列化為字符串,反序列化即將字符串反序列化為 JS 對(duì)象。

調(diào)用 JSON 方法,可以將對(duì)象序列化成字符串,也可以將字符串反序列化成對(duì)象。

JSON.stringify(object)? //序列化對(duì)象,將對(duì)象轉(zhuǎn)為字符串。

JSON.parse(jsonStr)//反序列化,將json字符串轉(zhuǎn)換為對(duì)象。

[if !supportLists]3)????????[endif]eval()

1、可借助 eval()動(dòng)態(tài)函數(shù),將參數(shù)字符串解析成 js 代碼來(lái)執(zhí)行,只接受原始字符串作為參數(shù)

eval(“console.log(‘你好’)”);//控制臺(tái)輸出你好

2、可將 json 串轉(zhuǎn)為 json 對(duì)象

1)第一種解析方式:得到的 json 對(duì)象名就是 jsonObj

eval("varjsonObj = " + jsonStr);

2)第二種解析方式:對(duì)象中有多個(gè)屬性

varjsonObj = eval("(" + jsonStr + ")");

由于 json 是以{ }的方式來(lái)開(kāi)始以及結(jié)束的,在 eval中會(huì)被當(dāng)成一個(gè)語(yǔ)句塊來(lái)處理,故必須強(qiáng)制將它轉(zhuǎn)換成一種表達(dá)式。加上圓括號(hào)是使 eval 函數(shù)在處理時(shí)強(qiáng)制將括號(hào)內(nèi)的表達(dá)式轉(zhuǎn)化為對(duì)象而不作為語(yǔ)句來(lái)執(zhí)行。

3)第二種解析方式:對(duì)象中只有一個(gè)屬性

eval(jsonStr);

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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