內(nèi)置對象內(nèi)置對象就是指一個語言自帶的一些對象,供開發(fā)者使用,這些對象提供了一些常用的或是最基本而必要的功能。 JS標(biāo)準(zhǔn)內(nèi)置對象一般我們認為有12個。其中可以通過 new 關(guān)鍵字進行實例化對象的有9個,我們叫做構(gòu)造器對象: Object、Boolean、String、Number、Function、Array、RegExp、Date、Error; 還有剩下的3個對象:Math、JSON、全局對象。 ? 一、Date 對象ECMAScript 中的 Date 對象是在早期 Java 中的 java.util.Date 類基礎(chǔ)上構(gòu)建的。為此,Date 對象使用自 UTC(Coordinated Universal Time,國際協(xié)調(diào)時間)1979 年 1 月 1 日午夜(零時)開始經(jīng)過的毫秒數(shù)來保存日期。
創(chuàng)建 Date 對象要創(chuàng)建一個日期對象,使用new 操作符調(diào)用Date構(gòu)造函數(shù)即可。如下所示: let dt = new Date(); 在調(diào)用Date 構(gòu)造函數(shù)時,如果不傳遞參數(shù),新創(chuàng)建的對象會自動獲得當(dāng)前本地系統(tǒng)日期和時間。 在調(diào)用Date 構(gòu)造函數(shù)同時傳遞日期參數(shù),新創(chuàng)建的對象會獲得參數(shù)對應(yīng)的日期和時間。 new Date("January 12,2006 22:19:35"); new Date("January 12,2006"); new Date(2006,0,12,22,19,35); new Date(2006,0,12); new Date(1137075575000); // 2006-01-12T14:19:35.000Z 注:上面的各種創(chuàng)建形式都表示 2006 年 1 月 12 日這一天。 ? 獲取日期的方法通過以下方法,可以獲取具體的日期和時間:
? ? ? ? ? ? ? ? let dt = new Date(); console.log(dt.getFullYear()); // 2019 ? 設(shè)置日期的方法通過以下方法,可以設(shè)置具體的日期和時間:
? ? ? ? ? ? ? ? let dt = new Date(); dt.setFullYear(2000); console.log(dt.getFullYear()); // 2000 ? 二、JSON 對象JSON(JavaScript Object Notation),是道格拉斯·克羅克福特(Douglas Crockford)于 2001 年發(fā)明 的一種輕量級數(shù)據(jù)存儲格式。易于閱讀和編寫,同時也易于解析和生成。 JSON 作為 JavaScript 的一個子集,同時 ActionScript、C、C#、ColdFusion、E、Java、 JavaScript、ML、ObjectiveCAML、Perl、PHP、Python、Rebol、Ruby、Lua 等一系列的語言都對 JSON 提供支持。JSON 在后來成為了一個完全獨立于語言的文本格式,也成為數(shù)據(jù)交換的理想格式。 ? XML在 JSON 出現(xiàn)之前,一般使用 XML 來傳遞數(shù)據(jù)。因為 XML 是一種純文本格式,所以它適合在網(wǎng)絡(luò) 上進行數(shù)據(jù)交換。 <name>ZhangSan</name> <age>20</age> <gender>male</gender> XML 本身不算太復(fù)雜,但是,后來加上了 DTD、XSD、XPath、XSLT 等一大堆復(fù)雜的規(guī)范以后,使用起來就沒那么友好,慢慢“沒落”。 JSON 語法JSON 作為 JavaScript 的一個子集,它所支持的數(shù)據(jù)類型也與 JavaScript 中數(shù)據(jù)類型基本一致: ? number:和 JavaScript 的 number 完全一致; boolean:和 JavaScript 的 boolean 完全一致; string:和 JavaScript 的 string 類似; null:和 JavaScript 的 null 完全一致; array:和 JavaScript 的數(shù)組表示方式 [] 完全一致; object:和 JavaScript 的對象表示方式 {} 類似; ? ? 為了保證各種語言的統(tǒng)一解析,JSON 規(guī)定字符串必須用雙引號? " ",對象的鍵也必須用雙引號 " "。 [ { "name": "ZhangSan", "age": 20, "friends": ["HanMeiMei", "LiZiMing"], "isMarried": false, "spouse": null }, { "name": "HanMeiMei", "age": 30, "friends": ["ZhangSan"], "isMarried": true, "spouse": "LiZiMing" } ]
JSON 與 JavaScript 對象JSON 中的 [] 與 JavaScript 中的數(shù)組對象、JSON 中的 {} 與 JavaScript 中的 JSON 式對象,他們并不是同一個東西。 JSON 是 JavaScript 中對象的字符串表示方式,本質(zhì)上是 string,而JavaScript 中的數(shù)組和 JSON 式對 象,本質(zhì)上是 object。 ? JSON 與 JavaScript 對象互相轉(zhuǎn)換JSON 作為一種數(shù)據(jù)存儲格式變得日益流行。從 ES5 開始,就開始出現(xiàn)全局的 JSON 對象,該對象提 供了兩種方法,可以將 JSON 字符串和 JavaScript 對象進行相互轉(zhuǎn)換。 stringify() JSON 對象的 stringify() 方法用于將 JavaScript 對象轉(zhuǎn)換為 JSON 字符串 let data = [{ name: 'HanMeiMei', age: 20 }]; let JSONData = JSON.stringify(data); ? parse() JSON 對象的 parse() ?法?于將 JSON 字符串轉(zhuǎn)換為 JavaScript 對象 let JSONData = '[{ "name": "HanMeiMei", "age": 20 }]'; let data = JSON.parse(JSONData); ? Math 對象JavaScript 中提供了一個 Math 對象,用來使用一些數(shù)學(xué)公式和獲取數(shù)學(xué)中的常用值。 與直接編寫的計算功能相比,Math 對象提供的計算功能執(zhí)行起來要快得多。 ? Math 對象的屬性PI 返回圓周率(約等于3.14159) ? Math 對象的方法
? ? ? ? ? ? ? ? //隨機數(shù) let num = Math.random(); // 0 <= num < 1 let max = 100; // 0 <= num < max num = Math.random() * max; // 0 <= num <= max 整數(shù) num = Math.round(Math.random() * max); num = parseInt(Math.random() * (max 1)); // 效率更? let min = 50; // min <= num <= max 整數(shù) num = Math.round(Math.random() * (max - min)) min; 實例: 創(chuàng)建一個函數(shù),接收兩個參數(shù),生成一個取值范圍在兩個參數(shù)之間的隨機整數(shù)。 function random(min, max) { if (!max) { return parseInt(Math.random() * (min 1)); } return parseInt(Math.random() * (max - min 1)) min; } ? 基本類型包裝對象對象是 JavaScript 語言最主要的數(shù)據(jù)類型,三種原始類型的值:數(shù)值、字符串、布爾值,在一定條件 下,也會自動轉(zhuǎn)為對象,也就是原始類型的“包裝對象”(wrapper)。 所謂“包裝對象”,是指與數(shù)值、字符串、布爾值分別相對應(yīng)的 Number、String、Boolean 三個內(nèi)置對象。 這三個內(nèi)置對象可以把原始類型的值轉(zhuǎn)換成(包裝成)對象;包裝后的對象也能轉(zhuǎn)換成 (解包裝成)原始類型的值;這個過程在一定條件下可以自發(fā)的完成, 這兩個過程分別稱為“自動裝箱”和“自動拆箱”, 包裝對象的設(shè)計目的: 首先是使得“對象”這種類型可以覆蓋 JavaScript 所有的值,整門語言有一個通用的數(shù)據(jù)模型, 其次是使得原始類型的值也有辦法使用自己的屬性和方法。 在 JavaScript 中,曾有一種說法叫做“一切皆對象”,包裝對象就有點這個意思,想要讓一切都用對象來表示。 let str1 = "abc";// 基本數(shù)據(jù)類型 let str2 = new String("abc");// 基本數(shù)據(jù)對應(yīng)的包裝對象 console.log(typeof str1);// 打印結(jié)果:string console.log(typeof str2);// 打印結(jié)果:object console.log(str1 "def");// 打印結(jié)果:abcdef console.log(str2 "def");// 打印結(jié)果:abcdef (自動拆箱,參與基本數(shù)據(jù)類型運算) console.log(str1.length);// 打印結(jié)果:3 (自動裝箱,使用包裝對象的屬性) ? valueOf() 和 toString()兩種包裝對象的方法:valueOf() 和 toString()。 valueOf() 方法返回包裝對象實例對應(yīng)的原始類型的值: new Number(111).valueOf() // 結(jié)果:111 new String('abc').valueOf() // 結(jié)果:"abc" new Boolean(false).valueOf() // 結(jié)果:false toString() 方法返回對應(yīng)的字符串形式: new Number(111).toString() // 結(jié)果:"111" new String('abc').toString() // 結(jié)果:"abc" new Boolean(false).toString() // 結(jié)果:"false" ? String 對象定義字符串,除了最常用的通過引號定義一個字符串之外,還可以通過構(gòu)造函數(shù) String 來定義字符串。
let str1 = 'hello'; let str2 = new String('string'); console.log( typeof str1 ); // string console.log( typeof str2 ); // object 注:這兩種方式創(chuàng)建出來的字符串除了數(shù)據(jù)類型不一樣之外,由于自動裝拆箱的機制,除了一些特別的情況 (比如全等),其它時候在使用上是完全一樣的。 ? 字符串的屬性 length:返回字符串的長度。
let str = 'hello string'; console.log( str.length ); 注意:只能獲取,不能設(shè)置。 ? 字符串的方法 查找字符: charAt(index) 返回在指定位置index(從 0 開始)的字符 charCodeAt(index) ? 返回在指定位置index(從 0 開始)的字符的ascii編碼
查找位置: indexOf(str) ? 從左往右查找元素,返回匹配的第一個字符str的下標(biāo)。沒有返回-1 lastIndexOf(str) ? ?從右往左查找元素,返回匹配的第一個字符str的下標(biāo)。沒有返回-1 ? 字符串轉(zhuǎn)數(shù)組: split(str) 把一個字符串按指定符號str分割成字符串?dāng)?shù)組 ? 去掉空格: trim() 去除字符串兩邊的空白 注:也有去除某一邊的。 連接兩個字符串: concat(str) 方法用于當(dāng)前字符串和另一個字符串str,得到新字符串
提取字符串: slice(start,end) ? 截取start到end(不包括)的字符串 substr(start,length) 截取start開始的length?度的字符串 subString(start,end) ? 截取start到end(不包括)的字符串、 ? 大小寫轉(zhuǎn)換: toLowerCase() 把字符串轉(zhuǎn)換為小寫 toUpperCase() 把字符串轉(zhuǎn)換為大寫 let str = " Abc&Def&Ghi&Jkl ".trim().toLowerCase().split("&").join(""); console.log(str);// 打印結(jié)果:"abcdefghijkl" ? Number 對象定義數(shù)字,同 String。 let n1 = 111; let n2 = new Number('111'); console.log( typeof n1 ); // number console.log( typeof n2 ); // object
數(shù)字的方法 我們可以直接通過自動裝箱來使用基本數(shù)據(jù)類型對應(yīng)包裝對象的屬性和方法,如 "123".length ,但是數(shù)字類型由于“.”可以解析成小數(shù)點, 所以在使用時為了避免歧義要使用兩個點或者用“()”括起來, 如:9..toString() 或 (9).toString()。 ? toFixed(num) 該數(shù)轉(zhuǎn)為指定位數(shù)的小數(shù),然后返回這個小數(shù)對應(yīng)的字符串。參數(shù)num(0- 20)為小數(shù)位數(shù) toPrecision(num) ??返回該數(shù)轉(zhuǎn)為指定位數(shù)的有效數(shù)字,參數(shù)num(0-21)為有效數(shù)字的位數(shù) toExponential(num) ? 返回該數(shù)轉(zhuǎn)為科學(xué)計數(shù)法形式,保留num(0-20)位小數(shù)? 數(shù)字的方法,用的太少了。 ? Boolean 對象定義布爾值,同 String。
let n1 = true; let n2 = new Boolean(true); console.log( typeof n1 ); // boolean console.log( typeof n2 ); // object ? RegExp 對象RegExp 對象,即正則表達式(regular expression),描述了一種字符串匹配的模式/規(guī)則 (pattern)??梢杂脕韺崿F(xiàn)驗證、搜索、替換等對字符串的操作。 正則的聲明聲明一個正則對象有兩種方式: 字面量 let re = /pattern/modifiers; 構(gòu)造函數(shù) let re = new RegExp( pattern, modifiers ); 參數(shù)說明: pattern:模式。描述了一個表達式模式(規(guī)則)。 modifiers:修飾符。描述了檢索時是否全局檢索、是否區(qū)分大小寫等。 let re = /a/; // 表示這個 re 的正則的規(guī)則就是“包含a” ? 正則對象的方法
? ? ? ? let re = /to/; let str = 'nice to meet you ~'; console.log(re.test(str)); // true console.log(re.exec(str)); // [ 'to', index: 5, input: 'nice to meet you ~' ] ? 常用規(guī)則字符組,用于匹配某一組字符中的任意一個字符。
? let re = /[abc]/; let str = 'nice to meet you'; re.test(str); // true ? 簡記:
注:妥善的利用互補屬性,可以得到一些巧妙的效果。如:[\s\S]、[\w\W]、[\d\D] 都可以表示任意字符。 ? 量詞:用來匹配目標(biāo)字符的出現(xiàn)個數(shù)。
// 匹配美式 color 和 英式 colour let re = /colou?r/; console.log(re.test('color')); // true console.log(re.test('colour')); // true ? 特殊字符
修飾符
let re = /^b./m; let str = "aaaaa\nbaaaaa\naaaaa"; console.log(re.test(str)); ? 支持正則的 String 對象的方法
let str = 'Mr Blue has a blue house and a blue car'; console.log(str.search('blue'));// 打印結(jié)果:14 console.log(str.search(/blue/gi));// 打印結(jié)果:3 console.log(str.match('blue'));// 打印結(jié)果:["blue", index: 14, input: "Mr Blue has a blue house and a blue car", groups: undefined] console.log(str.match(/blue/gi));// 打印結(jié)果:["Blue", "blue", "blue"] console.log(str.replace('blue', 'red'));// 打印結(jié)果:"Mr Blue has a red house and a blue car" console.log(str.replace(/blue/gi, 'red'));// 打印結(jié)果:"Mr red has a red house and a red car" ? ? 其它對象全局對象對于任何 JavaScript 程序,當(dāng)程序開始運行時,JavaScript 解釋器都會初始化一個全局對象。 全局對象,它預(yù)定義了全局的屬性、函數(shù)、對象、構(gòu)造函數(shù)以便你開發(fā)使用。 比如說: 全局的屬性: undefined、Infinity 和 NaN 全局的對象: Math、JSON 和 Number 全局的函數(shù): isNaN()、isFinite()、parseInt() 和 eval() 等 全局的構(gòu)造器對象: Date()、RegExp()、String()、Object() 和 Array() 等 注:不同的環(huán)境中,全局對象是不同的。 ? Error對象error,指程序中的非正常運行狀態(tài),在其他編程語言中稱為“異?!被颉板e誤”。 解釋器會為每個錯誤情形創(chuàng)建并拋出一個 Error 對象,其中包含錯誤的描述信息。 ECMAScript 定義了六種類型的錯誤。除此之外,還可以使用 Error 構(gòu)造方法創(chuàng)建自定義的 Error 對象, 并使用 throw 語句拋出該對象。 也可以使用 try-catch-finally 語句處理異常。 六種錯誤: ReferenceError :找不到對象時 TypeError :錯誤的使用了類型或?qū)ο蟮姆▏〞r RangeError :使用內(nèi)置對象的方法時,參數(shù)超范圍 SyntaxError :語法寫錯了 EvalError :錯誤的使用了 Eval URIError : URI 錯誤 throw new Error("我錯了!");//通過throw關(guān)鍵字拋出?定義錯誤 try { say("Welcome!"); }catch(err) {//如果發(fā)?錯誤,捕獲錯誤對象,存放在變量err中 console.log(err.name ":" err.message);//打印錯誤對象的信息 } ? 來源:https://www./content-4-597201.html |
|