国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
JavaScript的類型、值和變量

  計(jì)算機(jī)程序的運(yùn)行需要對(duì)值進(jìn)行操作,在編程語(yǔ)言中,能夠表示并操作的值得類型稱為數(shù)據(jù)類型。變量用來(lái)將值存儲(chǔ)起來(lái),變量是值得符號(hào)名稱。

一、數(shù)據(jù)類型

  JavaScript的數(shù)據(jù)類型可以分為兩類,原生類型和對(duì)象類型,JavaScript的原始類型包括數(shù)字、字符串和布爾值,JavaScript還有兩個(gè)特殊的原始值null(空)和undefined(未定義),它們不是數(shù)字、字符串和布爾值。對(duì)象類型包含普通對(duì)象、數(shù)組、函數(shù)、日期、正則、錯(cuò)誤對(duì)象。

  JavaScript的類型也可以按有無(wú)方法分,除了null和undefined,其他的類型都是擁有方法的值,字符串、數(shù)字、布爾值在使用方法時(shí),會(huì)臨時(shí)轉(zhuǎn)化為對(duì)應(yīng)的對(duì)象。

  JavaScript的類型也可以可變類型和不可變類型,只有對(duì)象和數(shù)組屬于可變類型,其他的都是不可變類型,包括字符串。

二、JavaScript的內(nèi)存管理機(jī)制

  JavaScript解釋器有自己的內(nèi)存管理機(jī)制,可以自動(dòng)對(duì)內(nèi)存進(jìn)行垃圾回收。這意味著程序員可以按需創(chuàng)建對(duì)象,程序員則不必?fù)?dān)心這些對(duì)象的銷毀和內(nèi)存回收,當(dāng)不再有任何引用指向一個(gè)對(duì)象,解釋器就會(huì)知道這個(gè)對(duì)象沒(méi)用了 ,然后就自動(dòng)回收它所占的內(nèi)存資源。 

三、數(shù)值

  a、JavaScript中數(shù)值有整型和浮點(diǎn)型

  整型可以用十進(jìn)制和十六進(jìn)制(0xff).

  浮點(diǎn)型可以包含小數(shù)點(diǎn),可以采用傳統(tǒng)寫法,還可以使用指數(shù)計(jì)數(shù)法。

  3.14

  6.02e23  //6.02x1023

  6.02E-23  //6.02x10-23

  b、JavaScript中的算術(shù)運(yùn)算

  JavaScript運(yùn)算符包括+、-、*、/、%(求余).除了基本的運(yùn)算符外,Javascript還支持更復(fù)雜運(yùn)算。這些運(yùn)算和Math對(duì)象的屬性和方法有關(guān)。

  Math對(duì)象的屬性

  

  Math對(duì)象的方法

  

    例子:

  

        Math.round(Math.random()*10)           //返回0到10(包含0和10)的整數(shù)

  溢出當(dāng)數(shù)值超出了JavaScript所能表示的數(shù)字上限(溢出),結(jié)果為一個(gè)無(wú)窮大值。表示為Infinity。

     當(dāng)負(fù)數(shù)超出了JavaScript所能表示的負(fù)數(shù)范圍,結(jié)果為負(fù)無(wú)窮大。表示為-Infinity。

     基于無(wú)窮大的加減乘除讓是無(wú)窮大,保留其原來(lái)的符號(hào)。

  下溢:當(dāng)運(yùn)算結(jié)果無(wú)限接近0且比JavaScript所能表示的最小值還小時(shí)發(fā)生下溢。這種情況下JavaScript返回0。正數(shù)下溢返回0;負(fù)數(shù)下溢返  回-0;0和-0幾乎沒(méi)有區(qū)別(除了作為除數(shù))?!?/span>

1   var  a=0;2   var  b=-0;3   console.log(a===b);  //true4   console.log(1/a===1/b) //false

 

  被0整除并不會(huì)報(bào)錯(cuò)?!?/span> 

1 var  a=1;2 console.log(a/0);  //Infinity3 console.log(a/-0); //-Infinity4console.log(0/0) //NaN

  NaN(not -a-number)://表示不是一個(gè)數(shù)字

  0/0、無(wú)窮大除無(wú)窮大、給負(fù)數(shù)開(kāi)偶次方、算術(shù)運(yùn)算符的操作數(shù)不是一個(gè)數(shù)字或者無(wú)法轉(zhuǎn)化成數(shù)字(+運(yùn)算符特殊)。

1 console.log(0/0);  //NaN2 console.log(Infinity/Infinity); //NaN3 console.log(Math.sqrt(-3))   //NaN4 console.log('a2'-3); //NaN

  Infinity和NaN是JavaScript中定義的全局變量。

  NaN和任何值都不相等,包括自身。所以判斷一個(gè)值x是不是NaN,應(yīng)使用x!=x。

  isNaN是一個(gè)全局函數(shù)??梢杂脕?lái)判斷一個(gè)數(shù)字是不是NaN,如何一個(gè)是NaN或者不能轉(zhuǎn)換成一個(gè)數(shù)字,返回true. 

1 console.log(isNaN([]));  //false2 console.log(isNaN('3'))  //fase3 console.log(isNaN('ab'))  //true

   isFinity()也是一個(gè)全局函數(shù)。當(dāng)參數(shù)是NaN(轉(zhuǎn)化成數(shù)字),-Infinity,Infinity的時(shí)候,返回false.其他時(shí)候都是返回true. 

1 console.log(isFinite(Infinity));  //false2 console.log(isFinite(NaN))  //false3 console.log(isFinite('ab'))  //false

 

四、字符串

  字符串一個(gè)一組不可變字符組成的序列,字符串的字符索引從0開(kāi)始,字符串的長(zhǎng)度是其所包含的字符的個(gè)數(shù),空字符的長(zhǎng)度為0.

  字符串直接量要用單引號(hào)或者雙引號(hào)括起來(lái),字符換換行用反斜線\連接。

  ‘’\'在字符串中有著特殊用途,'\'+字符會(huì)改變字符原來(lái)的意思。'\n'代表?yè)Q行,這類字符稱作轉(zhuǎn)義字符。

  

五、布爾值

  布爾值指代真或假,只有兩個(gè)值true和false。JavaScript中比較運(yùn)算通常返回的都是布爾值。

  a=1;b=2;

  a==b;//返回false

六、null和undefined  

  null是JavaScript中的關(guān)鍵字。常用來(lái)表示空值。typeof null會(huì)返回"object".實(shí)際上null是它自有類型的唯一值。他表示數(shù)字、字符串、對(duì)象是無(wú)值的。

  undefined是JavaScript中的全局變量,表示變量的值沒(méi)有初始化。typeof undefined返回"undefined"。是它自有類型的唯一成員。  

1 console.log(typeof null); //object2 console.log(typeof undefined); //undefined 

  ==運(yùn)算符認(rèn)為他兩個(gè)是相等。

七、全局對(duì)象

  全局對(duì)象的屬性是全局定義的符號(hào),JavaScript可以直接使用。當(dāng)JavaScript解釋器啟動(dòng)時(shí),他會(huì)創(chuàng)建一個(gè)新的全局對(duì)象,并給他一組定義的初始屬性。

  全局屬性:undefined、Infinity、NaN等

  全局函數(shù):isNaN()、eval()等

  構(gòu)造函數(shù):Date()、Array()等

  全局對(duì)象:Math、JSON

  全局對(duì)象的初始屬性不是保留字,但是應(yīng)該當(dāng)做保留字對(duì)待。

  在最頂級(jí)代碼中,可以使用this關(guān)鍵字引用全局對(duì)象。全局對(duì)象定義了JavaScript中的所有的預(yù)定義全局值。這個(gè)特殊對(duì)象同時(shí)包含了程序定義的全局值(用戶自定義的全局變量)。

 八、包裝對(duì)象

  JavaScript中的數(shù)字、字符串、布爾值也可以調(diào)用方法。這些原始值在調(diào)用方法之前會(huì)通過(guò)對(duì)應(yīng)的構(gòu)造函數(shù)轉(zhuǎn)化成對(duì)象,調(diào)用對(duì)象的方法(屬性),對(duì)象會(huì)自動(dòng)銷毀。 

1 var s="s";2 s.len=4;//給它設(shè)置屬性3 console.log(s.len);//undefined

  null和undefined沒(méi)有包裝對(duì)象。訪問(wèn)它們的屬性會(huì)報(bào)錯(cuò)。

 ==認(rèn)為包裝對(duì)象是相等的,而===認(rèn)為他們是不等。

  typeof可以看出其中的差別。 

1 var s="s";2 var S=new String(s)3 console.log(typeof s);//"string"4 console.log(typeof S);//"object"

 

九、不可變的原始值和可變的對(duì)象引用

  原始值是不可變的。通過(guò)字符串的方法修改字符串返回一個(gè)新的字符串,而字符串的原始值并沒(méi)改變。 

1 var s="sdasd";2 console.log(s.toUpperCase());//"SDASD"
3 console.log(s);//"sdasd"

 

  原始值得比較是值得比較。例如字符串只要長(zhǎng)度相等,對(duì)應(yīng)位置的字符相等,則認(rèn)為它們是相等。

  對(duì)象和原始值不同,對(duì)象的值是可變的。

1 var obj={2     a:1,3     b:24 }5 obj.a=3;6 console.log(obj.a);  //3

  對(duì)象的比較不能通過(guò)值來(lái)比較,即使兩個(gè)對(duì)象同樣的值屬性且屬性值相等。它們也是不相等。

  變量存儲(chǔ)的是對(duì)象的引用值,即對(duì)象在堆中的地址。只有引用值相等。才能認(rèn)為兩個(gè)對(duì)象是相等。

十、類型轉(zhuǎn)換

  a.隱式類型轉(zhuǎn)化

  JavaScript中的取值類型非常靈活,可以根據(jù)需要自動(dòng)轉(zhuǎn)化類型。

  

  對(duì)象轉(zhuǎn)換成布爾值:所有的對(duì)象都會(huì)轉(zhuǎn)換成true;new Boolean(false)對(duì)象也會(huì)轉(zhuǎn)換成true.

  對(duì)象轉(zhuǎn)換成數(shù)字和對(duì)象轉(zhuǎn)換成字符串:這里提到到轉(zhuǎn)換方法只適合于本地對(duì)象(宿主對(duì)象(Web瀏覽器定義的對(duì)象)有自己的轉(zhuǎn)換規(guī)則)。所有的對(duì)象都繼承了兩個(gè)轉(zhuǎn)化方法。

  第一個(gè)是toString()方法:默認(rèn)的toString()方法用來(lái)返回對(duì)象的類型。

1 var obj={2     a:1,3     b:24 }5 console.log(obj.toString());  //[object object]

  日期對(duì)象、數(shù)組、函數(shù)、正則對(duì)象的toString()方法。

1 console.log([1,2,3].toString());    //1,2,32 console.log(new Date().toString())     //Wed Mar 07 2018 02:01:18 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)3 console.log(function(){return 0;}.toString()) //function (){return 0;}4 console.log(/\d+/i.toString())  // /\d+/i

  第二個(gè)方法時(shí)valueOf().如果對(duì)象存在原始值。則這個(gè)方法返回原始值,大多數(shù)對(duì)象無(wú)法還原成原始值,valueOf()簡(jiǎn)單返回對(duì)象本身。數(shù)組、函數(shù)、正則對(duì)象的valueOf()方法返回對(duì)象本身。而日期對(duì)象的valueOf()返回的是1970.1.1到現(xiàn)在的毫秒數(shù)。 

1 console.log(new Date().valueOf())     //1520359837257

  JavaScript中的對(duì)象轉(zhuǎn)換成字符串:--如果對(duì)象有toString()方法,調(diào)用這個(gè)方法返回一個(gè)原始值,再把原始值轉(zhuǎn)換成字符串。

                   --如果對(duì)象沒(méi)有toString()方法,或者這個(gè)方法返回的不是一個(gè)原始值,則調(diào)用valueOf(),調(diào)用這個(gè)方法返回一個(gè)原始值,再把原始值轉(zhuǎn)換成字符串

                   --如果不能通過(guò)上述的兩個(gè)方獲得原始值,則拋出一個(gè)類型錯(cuò)誤。

  JavaScript對(duì)象轉(zhuǎn)換成數(shù)字:和轉(zhuǎn)發(fā)成字符串的方法類似,不過(guò)先調(diào)用valueOf()方法獲得原始值,轉(zhuǎn)換成數(shù)字。

  +、==、!=、關(guān)系運(yùn)算符(>、<)中對(duì)象到原始值的轉(zhuǎn)換:先調(diào)用valueOf(),在調(diào)用toString()。得到的原始值直接使用。

  +、==操作日期對(duì)象時(shí)轉(zhuǎn)化成數(shù)字、字符串:先調(diào)用toString(),在調(diào)用valueOf(),得到原始值直接使用。 

1 var  now=new Date();2 console.log(now==now.toString());//true  先調(diào)用toString()3 console.log(now+1)              //Wed Mar 07 2018 02:37:30 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)1  先調(diào)用toString()4 console.log(now>now-1)          //true  先調(diào)用valueOf()

  b、顯示類型轉(zhuǎn)換

  轉(zhuǎn)換成數(shù)字:Number()函數(shù)、ParseInt()、ParseFloat()

  Number()只能基于10進(jìn)制進(jìn)行轉(zhuǎn)換,不能出現(xiàn)非法的尾隨字符:

  ParseInt()用于整型:可以忽略前導(dǎo)空格、盡可能多的解析更多數(shù)值,忽略后面的內(nèi)容,不能轉(zhuǎn)換返回NaN

  ParseFloat()整型和浮點(diǎn)型 可以忽略前導(dǎo)空格、盡可能多的解析更多數(shù)值,忽略后面的內(nèi)容,不能轉(zhuǎn)換返回NaN

  

   parseInt可以接受第二個(gè)參數(shù),這個(gè)參數(shù)指定數(shù)字的基數(shù)(2~36)。

  

  轉(zhuǎn)換成字符串:String()、toString()

  String()函數(shù)會(huì)把null、undefined轉(zhuǎn)換成空對(duì)象,而toString()方法會(huì)報(bào)錯(cuò)。

  toString()在用于數(shù)字到字符串的轉(zhuǎn)換時(shí),可以在參數(shù)中輸入數(shù)的基數(shù),表示數(shù)字是幾進(jìn)制的。  

1 var n=12;2 console.log(n.toString(16));//c

 

  toFixed()、toExponential()、toPrecision()也可以用于數(shù)字到字符串的轉(zhuǎn)換;

  toFixed(arg):參數(shù)用來(lái)指定小數(shù)的位數(shù)

  toExponential(arg):使用指數(shù)計(jì)數(shù)法表示數(shù)字,小數(shù)點(diǎn)前只有一位,參數(shù)指定了小數(shù)點(diǎn)后的位數(shù)

  toPrecision(arg):arg指定有效數(shù)字的位數(shù),如果有效數(shù)字的位數(shù)少于整數(shù)部分的位數(shù),則使用指數(shù)表示。

  以上的三個(gè)方法會(huì)進(jìn)行四舍五入和補(bǔ)0操作。  

1 var a=123456.7892 console.log(a.toFixed(0)) //"123457"3 console.log(a.toFixed(1)) //"123456.8"4 console.log(a.toFixed(5)) //"123456.78900"5 console.log(a.toExponential(2)) //"1.23E5"6 console.log(a.toExponential(3)) //"1.235E5"7 console.log(a.toPrecision(3))  //"1.23e5"8 console.log(a.toPrecision(7))  //"123456.8"

  轉(zhuǎn)換成對(duì)象:Object()

  轉(zhuǎn)換成布爾值:Boolean()

十一、變量聲明

  a、用var關(guān)鍵字聲明變量:

  var x,y;  var x=1,y=2;

  聲明的變量沒(méi)有初始化之前的值是undefined.

  可以使用聲明一個(gè)變量多次,但是不能使用未聲明的變量。不使用var關(guān)鍵字聲明的變量是全局變量,無(wú)論位置。不用var聲明的變量可以用delete 刪除。

  b、全局變量和局部變量

  全局變量擁有全局作用,局部變量只在函數(shù)內(nèi)可見(jiàn),函數(shù)體局部變量的優(yōu)先級(jí)高于全局變量。 

  c、變量聲明提前

  在函數(shù)中變量的聲明前就可以用,變量的聲明就好像放在函數(shù)的最前面一樣?!?/span>

1 (function(){2     console.log(a);//undefined3     var a=0;4     console.log(a);//05 })();

 十二、作用域鏈

  JavaScript中規(guī)定全局變量是全局對(duì)象的屬性,可以通過(guò)this關(guān)鍵字引用全局變量。而局部變量是與函數(shù)調(diào)用相關(guān)的某個(gè)對(duì)象的屬性,JavaScript中沒(méi)有辦法引用該對(duì)象。作用域鏈?zhǔn)且粋€(gè)鏈表,上面存放了當(dāng)前位置代碼可訪問(wèn)的變量的保存對(duì)象。JavaScript需要訪問(wèn)某個(gè)變量時(shí),它會(huì)在作用域鏈的對(duì)象上查找是否有該屬性,直到找到該屬性,否則會(huì)報(bào)錯(cuò)。

  函數(shù)在定義的時(shí)候保存一個(gè)作用域鏈,當(dāng)函數(shù)調(diào)用的時(shí)候,創(chuàng)建一個(gè)對(duì)象用來(lái)保存函數(shù)內(nèi)部的局部變量,然后把對(duì)象添加到作用域鏈上,同時(shí)創(chuàng)建一個(gè)新的更長(zhǎng)的函數(shù)調(diào)用鏈。當(dāng)函數(shù)有嵌套函數(shù)時(shí),函數(shù)每次調(diào)用時(shí)內(nèi)部函數(shù)的作用域鏈都是不同的。 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JS中的基本類型和引用類型
JavaScript權(quán)威指南第6版
JavaScript之?dāng)?shù)據(jù)類型
JavaScript基本語(yǔ)法(全)
JavaScript簡(jiǎn)易教程
JavaScript基礎(chǔ)總結(jié)(一)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服