日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript的类型、值和变量

發布時間:2025/4/14 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript的类型、值和变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  計算機程序的運行需要對值進行操作,在編程語言中,能夠表示并操作的值得類型稱為數據類型。變量用來將值存儲起來,變量是值得符號名稱。

一、數據類型

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

  JavaScript的類型也可以按有無方法分,除了null和undefined,其他的類型都是擁有方法的值,字符串、數字、布爾值在使用方法時,會臨時轉化為對應的對象。

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

二、JavaScript的內存管理機制

  JavaScript解釋器有自己的內存管理機制,可以自動對內存進行垃圾回收。這意味著程序員可以按需創建對象,程序員則不必擔心這些對象的銷毀和內存回收,當不再有任何引用指向一個對象,解釋器就會知道這個對象沒用了 ,然后就自動回收它所占的內存資源。 

三、數值

  a、JavaScript中數值有整型和浮點型

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

  浮點型可以包含小數點,可以采用傳統寫法,還可以使用指數計數法。

  3.14

  6.02e23? //6.02x1023

  6.02E-23? //6.02x10-23

  b、JavaScript中的算術運算

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

  Math對象的屬性

  

  Math對象的方法

  

   ?例子:

  

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

  溢出當數值超出了JavaScript所能表示的數字上限(溢出),結果為一個無窮大值。表示為Infinity。

     當負數超出了JavaScript所能表示的負數范圍,結果為負無窮大。表示為-Infinity。

     基于無窮大的加減乘除讓是無窮大,保留其原來的符號。

  下溢:當運算結果無限接近0且比JavaScript所能表示的最小值還小時發生下溢。這種情況下JavaScript返回0。正數下溢返回0;負數下溢返  回-0;0和-0幾乎沒有區別(除了作為除數)。 

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

?

  被0整除并不會報錯。  

1 var a=1; 2 console.log(a/0); //Infinity 3 console.log(a/-0); //-Infinity 4console.log(0/0) //NaN

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

  0/0、無窮大除無窮大、給負數開偶次方、算術運算符的操作數不是一個數字或者無法轉化成數字(+運算符特殊)。

1 console.log(0/0); //NaN 2 console.log(Infinity/Infinity); //NaN 3 console.log(Math.sqrt(-3)) //NaN 4 console.log('a2'-3); //NaN

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

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

  isNaN是一個全局函數。可以用來判斷一個數字是不是NaN,如何一個是NaN或者不能轉換成一個數字,返回true. 

1 console.log(isNaN([])); //false 2 console.log(isNaN('3')) //fase 3 console.log(isNaN('ab')) //true

   isFinity()也是一個全局函數。當參數是NaN(轉化成數字),-Infinity,Infinity的時候,返回false.其他時候都是返回true. 

1 console.log(isFinite(Infinity)); //false 2 console.log(isFinite(NaN)) //false 3 console.log(isFinite('ab')) //false

?

四、字符串

  字符串一個一組不可變字符組成的序列,字符串的字符索引從0開始,字符串的長度是其所包含的字符的個數,空字符的長度為0.

  字符串直接量要用單引號或者雙引號括起來,字符換換行用反斜線\連接。

  ‘’\'在字符串中有著特殊用途,'\'+字符會改變字符原來的意思。'\n'代表換行,這類字符稱作轉義字符。

  

五、布爾值

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

  a=1;b=2;

  a==b;//返回false

六、null和undefined  

  null是JavaScript中的關鍵字。常用來表示空值。typeof null會返回"object".實際上null是它自有類型的唯一值。他表示數字、字符串、對象是無值的。

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

1 console.log(typeof null); //object 2 console.log(typeof undefined); //undefined?

  ==運算符認為他兩個是相等。

七、全局對象

  全局對象的屬性是全局定義的符號,JavaScript可以直接使用。當JavaScript解釋器啟動時,他會創建一個新的全局對象,并給他一組定義的初始屬性。

  全局屬性:undefined、Infinity、NaN等

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

  構造函數:Date()、Array()等

  全局對象:Math、JSON

  全局對象的初始屬性不是保留字,但是應該當做保留字對待。

  在最頂級代碼中,可以使用this關鍵字引用全局對象。全局對象定義了JavaScript中的所有的預定義全局值。這個特殊對象同時包含了程序定義的全局值(用戶自定義的全局變量)。

?八、包裝對象

  JavaScript中的數字、字符串、布爾值也可以調用方法。這些原始值在調用方法之前會通過對應的構造函數轉化成對象,調用對象的方法(屬性),對象會自動銷毀。 

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

  null和undefined沒有包裝對象。訪問它們的屬性會報錯。

 ==認為包裝對象是相等的,而===認為他們是不等。

  typeof可以看出其中的差別。 

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

?

九、不可變的原始值和可變的對象引用

  原始值是不可變的。通過字符串的方法修改字符串返回一個新的字符串,而字符串的原始值并沒改變。 

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

?

  原始值得比較是值得比較。例如字符串只要長度相等,對應位置的字符相等,則認為它們是相等。

  對象和原始值不同,對象的值是可變的。

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

  對象的比較不能通過值來比較,即使兩個對象同樣的值屬性且屬性值相等。它們也是不相等。

  變量存儲的是對象的引用值,即對象在堆中的地址。只有引用值相等。才能認為兩個對象是相等。

十、類型轉換

  a.隱式類型轉化

  JavaScript中的取值類型非常靈活,可以根據需要自動轉化類型。

  

  對象轉換成布爾值:所有的對象都會轉換成true;new Boolean(false)對象也會轉換成true.

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

  第一個是toString()方法:默認的toString()方法用來返回對象的類型。

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

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

1 console.log([1,2,3].toString()); //1,2,3 2 console.log(new Date().toString()) //Wed Mar 07 2018 02:01:18 GMT+0800 (中國標準時間) 3 console.log(function(){return 0;}.toString()) //function (){return 0;} 4 console.log(/\d+/i.toString()) // /\d+/i

  第二個方法時valueOf().如果對象存在原始值。則這個方法返回原始值,大多數對象無法還原成原始值,valueOf()簡單返回對象本身。數組、函數、正則對象的valueOf()方法返回對象本身。而日期對象的valueOf()返回的是1970.1.1到現在的毫秒數。 

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

  JavaScript中的對象轉換成字符串:--如果對象有toString()方法,調用這個方法返回一個原始值,再把原始值轉換成字符串。

                 ? --如果對象沒有toString()方法,或者這個方法返回的不是一個原始值,則調用valueOf(),調用這個方法返回一個原始值,再把原始值轉換成字符串

                 ? --如果不能通過上述的兩個方獲得原始值,則拋出一個類型錯誤。

  JavaScript對象轉換成數字:和轉發成字符串的方法類似,不過先調用valueOf()方法獲得原始值,轉換成數字。

  +、==、!=、關系運算符(>、<)中對象到原始值的轉換:先調用valueOf(),在調用toString()。得到的原始值直接使用。

  +、==操作日期對象時轉化成數字、字符串:先調用toString(),在調用valueOf(),得到原始值直接使用。 

1 var now=new Date(); 2 console.log(now==now.toString());//true 先調用toString() 3 console.log(now+1) //Wed Mar 07 2018 02:37:30 GMT+0800 (中國標準時間)1 先調用toString() 4 console.log(now>now-1) //true 先調用valueOf()

  b、顯示類型轉換

  轉換成數字:Number()函數、ParseInt()、ParseFloat()

  Number()只能基于10進制進行轉換,不能出現非法的尾隨字符:

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

  ParseFloat()整型和浮點型?可以忽略前導空格、盡可能多的解析更多數值,忽略后面的內容,不能轉換返回NaN

  

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

  

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

  String()函數會把null、undefined轉換成空對象,而toString()方法會報錯。

  toString()在用于數字到字符串的轉換時,可以在參數中輸入數的基數,表示數字是幾進制的。  

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

?

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

  toFixed(arg):參數用來指定小數的位數

  toExponential(arg):使用指數計數法表示數字,小數點前只有一位,參數指定了小數點后的位數

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

  以上的三個方法會進行四舍五入和補0操作。  

1 var a=123456.789 2 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"

  轉換成對象:Object()

  轉換成布爾值:Boolean()

十一、變量聲明

  a、用var關鍵字聲明變量:

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

  聲明的變量沒有初始化之前的值是undefined.

  可以使用聲明一個變量多次,但是不能使用未聲明的變量。不使用var關鍵字聲明的變量是全局變量,無論位置。不用var聲明的變量可以用delete 刪除。

  b、全局變量和局部變量

  全局變量擁有全局作用,局部變量只在函數內可見,函數體局部變量的優先級高于全局變量。 

  c、變量聲明提前

  在函數中變量的聲明前就可以用,變量的聲明就好像放在函數的最前面一樣。 

1 (function(){ 2 console.log(a);//undefined 3 var a=0; 4 console.log(a);//0 5 })();

?十二、作用域鏈

  JavaScript中規定全局變量是全局對象的屬性,可以通過this關鍵字引用全局變量。而局部變量是與函數調用相關的某個對象的屬性,JavaScript中沒有辦法引用該對象。作用域鏈是一個鏈表,上面存放了當前位置代碼可訪問的變量的保存對象。JavaScript需要訪問某個變量時,它會在作用域鏈的對象上查找是否有該屬性,直到找到該屬性,否則會報錯。

  函數在定義的時候保存一個作用域鏈,當函數調用的時候,創建一個對象用來保存函數內部的局部變量,然后把對象添加到作用域鏈上,同時創建一個新的更長的函數調用鏈。當函數有嵌套函數時,函數每次調用時內部函數的作用域鏈都是不同的。?

轉載于:https://www.cnblogs.com/yiluhuakai/p/8505066.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的JavaScript的类型、值和变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。