JavaScript高級程序設(shè)計(jì)之基本引用類型
前言:
引用值(對象)都是某個(gè)特定的引用類型的實(shí)例對象,例如 Date
類型、Function
類型,RegExp
正則表達(dá)式類型等等。JavaScript
內(nèi)置了一些常用的引用類型給開發(fā)者使用。
1、Date
下面3個(gè)方法返回的單位為毫秒的時(shí)間戳
let t1 = Date.UTC(2020, 11, 7, 22,14) let t2 = Date.parse("5/23/2020") let t3 = Date.now()
parse 接收的參數(shù)格式可以為:
Date()
構(gòu)造函數(shù)接收的參數(shù)有很多種,可以不接收任何參數(shù),也可以接收時(shí)間戳,還可以是UTC
函數(shù)和parse函數(shù)接收的參數(shù)
let t4 = new Date() let t5 = new Date(2020, 11, 7) // 月份從0開始 let t6 = new Date("5/23/2020")
Date
類型提供了相當(dāng)于的函數(shù),可自行查閱相關(guān)API
。
2、RegExp
JavaScript
中,正則表達(dá)式使用如下方式表示
let express = /pattern/flags;
- g :全局模式,表示查找字符串的全部內(nèi)容,而不是找到第一個(gè)匹配的內(nèi)容就結(jié)束。
- i :不區(qū)分大小寫,表示在查找匹配時(shí)忽略 pattern 和字符串的大小寫。
- m :多行模式,表示查找到一行文本末尾時(shí)會繼續(xù)查找。
- u :Unicode 模式,啟用 Unicode 匹配。
- s : dotAll 模式,表示元字符 . 匹配任何字符(包括 \n 或 \r )。
除了用字面量形式表示正則表達(dá)式之外,還可以使用RegExp構(gòu)造函數(shù)創(chuàng)建。
let p1 = /[cb]at/i let p2 = new RegExp("[cb]at", "i")
兩者等效。
RegExp
對象有兩個(gè)重要的方法,分別是exec
和test
方法
let p1 = /[cb]at/i let text = "hello cat bat nihao" matches = p1.exec(text) console.log(matches.index) console.log(matches.input) console.log(matches[0]) //cat
如果正則表達(dá)式匹配的話,返回的 matches
是Array
數(shù)組對象, 不匹配返回的就是null。 另外 matches
還有兩個(gè)額外的屬性 index
和input
。 index 是匹配的其實(shí)位置。input
就是要查找的字符串。 數(shù)組里面的元素其實(shí)就是正則表達(dá)式中的捕獲分組。如果沒有分組,第0個(gè)元素就是匹配的那個(gè)字符串。
let p1 = /([cb]a(t))/i console.log(matches[0]) //cat console.log(matches[1]) //cat console.log(matches[2]) //t
test 方法返回的是布爾值,用于判斷字符串是否匹配正則表達(dá)式。
let matched = /\d+/g.test("13") console.log(matched) //true
這里還要解釋一下flag
里面的那個(gè)g的作用, 現(xiàn)在看起來好像沒什么用,看下面這個(gè)例子就能明白
let p1 = /[cb]at/gi let text = "hello cat bat nihao" console.log(p1.exec(text)) // ["cat", index: 6, input: "hello cat bat nihao", groups: undefined] console.log(p1.exec(text)) //["bat", index: 10, input: "hello cat bat nihao", groups: undefined]
text 這個(gè)字符串中,其實(shí)有兩處是匹配正則表達(dá)式的,但是我們調(diào)用exec
的適合,matches
數(shù)組里面的元素是cat,并沒有bat。 當(dāng)我第二次執(zhí)行exec
的適合,返回的就是bat了。如果沒有g(shù),不管調(diào)用多少次,返回的都是cat。找到第一個(gè)匹配的內(nèi)容就結(jié)束了。
另外,字符串提供了很多方法,接收正則表達(dá)式作為參數(shù),可以用于正則表達(dá)式匹配,字符串替換、查找指定字符串或則分組。
3、原始包裝類型
Boolean
、Number
、String
這三個(gè)引用類型是原始類型對應(yīng)的包裝類型, 當(dāng)在原始值身上用到某些方法時(shí),會自動將原始值包裝成對應(yīng)的引用類型。比如上面字符串提供的那些方法,原始值本來是沒有這些方法的,但是String
類型就有。 這種機(jī)制使得原始值也能擁有對象的行為。
原始包裝類型有如下特點(diǎn),可以注意下:
let s1 = "hello" s1.name = "sex" console.log(s1.name) //undefined
為什么s1.name
是undefined
呢? 執(zhí)行第二行代碼的時(shí)候,會將s1轉(zhuǎn)換為了包裝類型, 執(zhí)行完這行代碼時(shí),該類型的對象其實(shí)就被回收了。然后在第三行又創(chuàng)建了一個(gè)包裝類型的對象,但是這個(gè)時(shí)候并沒有name
屬性,所以就是undefined
。 除非顯示的創(chuàng)建一個(gè)String
對象。
let s1 = "hello" s1 = new String(s1) s1.name = "sex" console.log(s1.name)
對于Number
, 使用 new
和 不適用 new
的區(qū)別
let value = 25 let number = Number(value) obj = new Number(value) console.log(typeof number) //number console.log(typeof obj) //object console.log(number instanceof Number) //false 原始值不是任何類型的實(shí)例對象 console.log(obj instanceof Number) //true
number
是原始值, obj
是Number
類型的對象。
Number
對象有個(gè)toFxied
方法用于將數(shù)值格式化為字符串, 用于保留指定位小數(shù)
let num = 10.007 console.log(num.toFixed(2)) //10.01
對于String,提供了非常多的操作字符串的方法,可以按照實(shí)例全部手敲一遍。
4、其他內(nèi)置對象
全局作用域下面的變量,常用的一些單獨(dú)的函數(shù)如evel
,parseInt
,isNaN
,還有原始引用類型的構(gòu)造函數(shù) String
、Boolean
、Number Function
、Array
都是Global
的屬性。但是我們沒法顯示的訪問Global
對象。另外encodeURI
,encodeURIComponent
在處理URL的適合非常有用。
url = "http://www.baidu.com/vue. js" console.log(encodeURI(url)) //http://www.baidu.com/vue.%20js console.log(encodeURIComponent(url)) // http%3A%2F%2Fwww.baidu.com%2Fvue.%20js
與之對應(yīng)的解碼函數(shù)是decodeURI
,decodeURIComponent
。
在瀏覽器中,window
對象作為了Global的代理對象,全局作用域下面的變量可以通過window
對象來訪問。
var name = "zhang" console.log(window.name) Math對象 console.log(Math.max(1,2,3,4)) // 最大值 console.log(Math.min(3,3,4)) // 最小值 console.log(Math.ceil("1.2")) //向上取整 console.log(Math.floor(3.3)) //向下取整 console.log(Math.round(3.6)) //四舍五入取整
到此這篇關(guān)于JavaScript高級程序設(shè)計(jì)之基本引用類型的文章就介紹到這了,更多相關(guān)JavaScrip基本引用類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript?CSS優(yōu)雅實(shí)現(xiàn)網(wǎng)頁多主題風(fēng)格換膚功能詳解
這篇文章主要為大家介紹了JavaScript?CSS優(yōu)雅的實(shí)現(xiàn)網(wǎng)頁多主題風(fēng)格換膚功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02axios?攔截器管理類鏈?zhǔn)秸{(diào)用手寫實(shí)現(xiàn)及原理剖析
這篇文章主要為大家介紹了axios?攔截器管理類鏈?zhǔn)秸{(diào)用手寫實(shí)現(xiàn)及原理剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08解析JS參數(shù)parseInt('012',?16)和parseInt(012,?16)是否相等
這篇文章主要為大家介紹了parseInt('012',?16)和parseInt(012,?16)是否相等原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02詳解微信小程序如何實(shí)現(xiàn)類似ChatGPT的流式傳輸
這篇文章主要為大家介紹了微信小程序如何實(shí)現(xiàn)類似ChatGPT的流式傳輸示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03微信小程序 獲取session_key和openid的實(shí)例
這篇文章主要介紹了微信小程序 獲取session_key和openid的實(shí)例的相關(guān)資料,希望能通過本文幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08Svelte嵌套組件preventDefault構(gòu)建Web應(yīng)用
這篇文章主要介紹了Svelte嵌套組件preventDefault構(gòu)建Web應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12