丨javascript類型有哪些你不知道細節_第1頁
丨javascript類型有哪些你不知道細節_第2頁
丨javascript類型有哪些你不知道細節_第3頁
丨javascript類型有哪些你不知道細節_第4頁
丨javascript類型有哪些你不知道細節_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

于7個類型之一。從變量、參數、返回值到表達式中間結果,任何JavaScript代碼運行過程中產生的數據,都具有運行時類型。JavaScript語言的每一個值都屬于某一種數據類型。JavaScript語言規定了7種語言類準,這7種語言類型是:除了ES6中新加入的Symbol類型,剩下6種類型都是我們日常開發中的了,void0undefined?現在我們就分別Undefinedundefined。任何變量在賦值前是Undefined類型、值為undefined,一般我們可以用全局變量undefined(就是名為但是呢,因為JavaScript的代碼undefined是一個變量,而并非是一個關鍵字,這是JavaScript語言公認的設計之一,所以,我們為了避免無意中被篡改,我建議使用void0來獲取undefined值。Undefined跟null有一定的表意差別,null表示的是:“定義了但是為空”。所以,在實際編程時,我們一般不會把變量賦值為undefined,這樣可以保證所有值為undefined的Null類型也只有一個值,就是null,它的語義表示空值,與undefined不同,null是JavaScriptnull關鍵字來獲取nullBoolean類型有兩個值,true和false,它用于表示邏輯意義上的真和假,同樣有關鍵字true和false來表示兩個值。這個類型很簡單,我就不做過多介紹了。String用于表示文本數據。String有最大長度是2^53-1,這在一般開發中都是夠用的,因為String的意義并非“字符串”,而是字符串的UTF16編碼,我們字符串的操作charAt、charCodeAt、lengthUTF16Note:現行的字符集國際標準,字符是以Unicode的方式表示的,每一個Unicode的碼點表示一個字符,理論上,Unicode的范圍是無限的。UTF是Unicode的編碼方式,規定了碼點在計算機中的表示方法,常見的有UTF16和UTF8。Unicode的碼點通常用U+???來表示,其中???是十六進制的碼點值。0-65536(U -U+FFFF)的碼點被稱為基本字符區域JavaScript中的字符串是無法變更的,一旦字符串構造出來,無法用任何方式改變字JavaScript字符串把每個UTF16單元當作一個字符來處理,所以處理非BMP(超出 -U+FFFF范圍)的字符時,你應該格外。JavaScript這個設計繼承自Java,標準中是這樣解釋的,這樣設計是為了“性能和盡可能實現起來簡單”。因為現實中很少用到BMP之外的字符。NumberNumberJavaScript中的Number類型 27(即2^64-2^53+3)個值JavaScriptNumberIEEE754-2008JavaScript為了表達幾個額外的語言場景(比如不讓除以0出錯,而引入了無窮大的概NaN,占用了9007199254740990,這原本是符合IEEE規則的數字;Infinity,另外,值得注意的是,JavaScript中有+0和-0,在加法類運算中它們沒有區別,但是除法的場合則需要特別留意區分,“忘記檢測除以-0,而得到負無窮大”的情況經常會導致錯誤,而區分+0和-0的方式,正是檢測1/x是Infinity還是-Infinity。所以Number==(===)段著名的代碼,這也正是我們第三題的問題,為什么在JavaScript中,0.1+0.2不能 console.log(0.1+0.2==這里輸出的結果是fals console.log(Math.abs(0.1+0.2-0.3)<=結果就是true了。Symbol是ES6中引入的新類型,它非字符串的對象key的集合,在ES6規范中,整個對象系統被用Symbol重塑。SymbolSymbol身:它有哪些部分,它表示什么意思,以及如何創建Symbol類型。SymbolSymbol我們創建Symbol的方式是使用全局的Symbol函數。例如: varmySymbol=Symbol("my一些標準中提到的Symbol,可以在全局的Symbol函數的屬性中找到。例如,我們可以使用Symbol.i tor來自定義for…of在對象上的行為: varo=new2o[Symbol.itor]=function()varv=returnnext:function()return{value:v++,done:v>10 for(varvof console.log(v);//0123...代碼中我們定義了i tor之后,用for(varvofo)就可以調用這個函數,然后我們可以根據函數的行為,產生一個for…of的行為。這里我們給對象o添加了 tor屬性,并且按照迭代器的要求定義了一個010forofoSymbol,也構成了語言的一類接口形式。它們允許編寫與語言結合更緊密的API。Object是JavaScript中最復雜的類型,也是JavaScript的機制之一。Object表示對在JavaScript中,對象的定義是“屬性的集合”。屬性分為數據屬性和器屬性,二者都是key-value結構,key可以是字符串或者Symbol類型。C++Java于很多人常常會把JavaScript的“類”與類型。事實上,JavaScriptJavaScript所以,須認識到3與newNumber(3)是完全不同的值,它們一個是Number類型,一個是對象類型。Number、StringBoolean,newSymbolnewSymbolJavaScript console.log("abc".charAt(0));甚至我們在原型上添加方法,都可以應用于基本類型,比如以下代碼,在Symbol原型上 o方法,在任何Symbol類型變量都可以調用。 Stotype.o=()=>console.log("2vara=console.log(typeofa);//symbol,a o();//o,有所以我們文章開頭的問題,答案就是.運算符提供了裝箱操作,它會根據基礎類型構造一個因為S型轉換。大部分類型轉換符合人類的,但是如果我們不去理解類型轉換的嚴格定義,很容易造成一些代碼中的判斷。其中最為臭名昭著的是JS中的“==”運算,因為試圖實現跨類型的比較,它的規則復雜這里我們當然也不打算講解==的規則,它屬于設計,并非語言中有價值的部分,很多實踐中推薦使用“==”,而要求程序員進行顯式地類型轉換后,用===比較。NumberString需要注意的是,parseIntparseFloat在不傳入第二個參數的情況下,parseInt16“0x”,而且會忽略非數字在一些古老的瀏覽器環境中,parseInt08誤的來源。所以在任何環境下,都建議傳入parseInt的第二個參數,而parseFloat則直多數情況下,Number是比parseInt和parseFloat在較小的范圍內,數字到字符串的轉換是完全符合你的十進制表示。當Number絕對JavaScriptNumber、String、Boolean、SymbolSymbolnew一個Symbol對象,我們可以利用一個函數的call方法來強迫產生裝箱。我們可以用console.log看一下這個東西的typeof,它的值是object,我們使用symbolObjectinstanceof可以看到,它是Symbol這個類的實例,我們找它的constructorSymbolSymbolvarsymbolObject=(function(){returnthis;2console.log(typeofsymbolObject);console.log(symbolObjectinstanceofSymbol);console.log(symbolObject.constructor==Symbol);使用內置的ObjectJavaScript varsymbolObject=2console.log(typeofsymbolObject);console.log(symbolObjectinstanceofSymbol);console.log(symbolObject.constructor==Symbol);ClassOtotype.toString varsymbolObject=2 console.log(Ototype.toString.call(symbolObject));//[object在JavaScript中,沒有任何方法可以更改私有的Class屬性,因此Ototype.toStringinstanceof但需要注意的是,calltypeofJavaScriptToPrimitive(即,StringNumber變成基本類型,再從基本類型轉換為對應的String或者Number。valueOftoStringvalueOfvaro=valueOf:()=>{console.log("valueOf");returntoString:()=>{console.log("toString");return 5o*//////o,ovalueOftoString象,然后我們進行o*2這個運算的時候,你會看見先執行了valueOf,接下來是toString,最后拋出了一個TypeError,這就說明了這個拆箱轉換失敗了。StringtoStringo*2String(o),那1o=2valueOf:()=>{console.log("valueOf");return3toString:()=>{console.log("toString");return4}5//////在ES6@@toPrimitiveSymbol1varo1varo=2valueOf:()=>{console.log("valueOf");return3toString:()=>{console.log("toString");return4}56o[Symbol.toPrimitive]=()=>{console.log("toPrimitive");return789console.log(o+////JavaScriptListRecord:CompletionRecord:用于描述異常、跳出等語句執行過程。Reference:用于描述對象屬性、delete等。LexicalEnvironmentEnvironmentRecord:用于描述變量和作用域。DataBlock:用于描述二進制數據。JavaScriptNumberparseInt,JSJavaScript據類型;另一方面,JS語言中提供了typeof這樣的運算,用來返回操作數的類型,但typeofobject——Nullfunction——Object從一般語言使用者的角度來看,,我們應該按照typeof的結果去理解語言的類型系統。但JS之父本人也在多個場合表示過,typeof的設計是有缺陷的,只是現在已經錯過 售賣。頁面已增加防盜追蹤,將依 上一 04|HTML語義:如何運用語義類來呈現Wiki網頁下一 06|JavaScript對象:面向對象還是基于對象寫寫

124老師,對于Numberconsole.log()為false,我就另測試了了一下console.log(0.3+0.2==0.5)就為true了呢,試試其他都是true,咕嘰咕 71原文:Undefinednullnull作者回復:一、奔跑的兔 62undefinedisapropertyoftheglobalobject;i.e.,itisavariableinglobalscope. varnum=于江 放在實際場景會出現大量NaN。“需要注意的是,parseIntparseFloat啊 31再飯小笛 關于Number類型,如果想要進一步理解可以去參考IEEE754中關于浮點數的表達規范,…懸 22leta=undefined; 14""-""*""/ 13unde

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論