摘要:在使用字面量表示法的時(shí)候,并不會(huì)調(diào)用對(duì)象的構(gòu)造函數(shù)種常用方法同一樣可通過和字面量?jī)煞N方法來(lái)創(chuàng)建。直接調(diào)用基本包裝類型的構(gòu)造函數(shù),返回實(shí)例都屬于這個(gè)構(gòu)造函數(shù)是會(huì)根據(jù)參數(shù)返回相應(yīng)的基本包裝類型的實(shí)例。
第五章、引用類型
一共七種引用類型:
Object: 可通過new和字面量?jī)煞N方法來(lái)創(chuàng)建。在使用字面量表示法的時(shí)候,并不會(huì)調(diào)用對(duì)象的構(gòu)造函數(shù)
Array: 17種常用方法; 同object一樣可通過new和字面量?jī)煞N方法來(lái)創(chuàng)建。
Date:
RegExp:
Function: 函數(shù)名指針,this指針,prototype原型鏈,apply()、call()
基本包裝類型(Boolean, Number, String):
單體內(nèi)置對(duì)象(Global, Math):
1.Object類型兩種訪問對(duì)象屬性的方法:
person["name"];
person.name;
通常建議使用點(diǎn)表示法
方括號(hào)表示方法主要優(yōu)點(diǎn): 通過變量來(lái)訪問屬性。
·[].length屬性不是只讀的,可以讀取,修改,擴(kuò)大/新增,縮小/刪除。
Array對(duì)象方法簡(jiǎn)介 (17 = 2+2+2+2+2+5+2)棧方法(LIFO): push(), pop()
隊(duì)列方法(FIFO): push(), shift()
另外還有unshift()
重排序方法: reverse(), sort()
調(diào)用的是toString類型,所以比較的是ascii碼
操作方法: concat(), slice()
位置方法: indexOf(), lastIndexOf();
使用的是全等號(hào)
迭代方法: every(), filter(), some(), forEach(), map()
歸并方法: reduce(), reduceRight()
經(jīng)典問題: 檢測(cè)對(duì)象是否是數(shù)組 arr instanceof Array?
本質(zhì)依賴于構(gòu)造函數(shù),受到執(zhí)行環(huán)境影響。所以,ES5當(dāng)中是新增了Array.isArray(arr)方法。
經(jīng)典問題: 類型判別?
typeof
null是對(duì)象空指針,適合判斷基本類型變量,不適合判斷引用類型(都返回object),比如自定義的對(duì)象類型
instanceof
如果有多個(gè)框架,那就存在兩個(gè)以上不同的全局執(zhí)行環(huán)境,那就會(huì)有兩個(gè)不同版本的Array的構(gòu)造函數(shù)。
而且返回的是true/false
constructor
高效但是危險(xiǎn)Null or Undefined
Object.prototype.toString.call() 建議使用
Array對(duì)象方法詳解方法前面帶*表示不修改原來(lái)數(shù)組
*join() 所有元素拼接成一個(gè)字符串,返回字符串
["Fire", "Air", "Water"].join("-")); //"Fire-Air-Water"
逆方法: String.prototype.split()
*slice()切片:從已有的數(shù)組中返回選定的元素
var animals = ["ant", "bison", "camel", "duck", "elephant"]; animals.slice(2);// Array ["camel", "duck", "elephant"] animals.slice(2, 4);//Array ["camel", "duck"] animals.slice(-2, -1) <==> animals.slice(3, 4) //前提條件:長(zhǎng)度為5
*concat()連接兩個(gè)或多個(gè)數(shù)組,返回新數(shù)組
arr1.concat(arr2)
splice()從數(shù)組中添加/刪除項(xiàng)目,返回被刪除的元素
months.splice(1, 0, "Feb"); // inserts at index 1 months.splice(4, 1, "May"); // replaces 1 element at index 4
pop() 刪除數(shù)組最后一個(gè)元素,返回被刪除的元素。如果數(shù)組為空,則不改變數(shù)組,返回undefined
shift()把數(shù)組的第一個(gè)元素刪除,返回第一個(gè)元素的值。若空數(shù)組,不進(jìn)行任何操作,返回undefined
push()向數(shù)組末尾添加一個(gè)或多個(gè)元素返回新數(shù)組的長(zhǎng)度
unshift()向數(shù)組的開頭添加一個(gè)或多個(gè)元素,返回新數(shù)組的長(zhǎng)度
reverse()顛倒元素順序,返回該數(shù)組
sort()根據(jù)ascii進(jìn)行排序,返回該數(shù)組
[0,1,5,10,15].sort(); //[0,1,10,15,5] [0,1,5,10,15].sort( (v1,v2) => { return (v1<=v2)? -1:1; }); //[0,1,5,10,15]
*toString() 返回?cái)?shù)組的字符串形式
toLocalString()
Date類型var start = Date.now(); // do something var end = Date.now(); costTime = stop -start;RegExp類型
var pattern = /[bc]at/gi <==> new RegExp("[bc]at","gi"); //大小寫不敏感,全局匹配bat或者cat var matches = pattern.exec("bat is not a cat");Function類型
函數(shù)名僅僅是指向函數(shù)的指針,不會(huì)與某個(gè)函數(shù)綁定(即變量法的函數(shù)引用是可以被覆蓋的)
注意函數(shù)聲明提升(function declaratioin hoisting)和變量提升是有區(qū)別的。
//unexpected identifier alert(sum(1,1)); var sum = function(v1, v2){ return v1 + v2; } //ok alert(sum1(1,1)); function sum1(v1, v2){ return v1 + v2; }內(nèi)部對(duì)象,this指針和類數(shù)組對(duì)象arguments
類數(shù)組對(duì)象arguments
嚴(yán)格模式下arguments.callee和arguments.caller無(wú)效
this指針
注意作用域
window.color = "red"; var o = { color : "blue"}; function sayColor(){ alert(this.color); } sayColor(); //red o.sayColor() = sayColor(); o.sayColor(); //blueFunction的prototype屬性、內(nèi)部方法
fn.length屬性表示fn希望接收的參數(shù)的個(gè)數(shù)
prototype屬性
保存所有實(shí)例方法的真正所在,換言之甚至toString(),valueOf()等方法都在prototype之下。
在創(chuàng)建自定義引用類型以及實(shí)現(xiàn)繼承時(shí),prototype極為重要。并且它是不可枚舉的,因此for-in無(wú)法發(fā)現(xiàn)。
內(nèi)部方法
每個(gè)fn都包含apply()和call(),apply()固定接收兩個(gè)參數(shù),作用域和arguments, call()接收多個(gè)參數(shù),第一個(gè)是作用域。
這兩個(gè)函數(shù)可以用來(lái)傳參數(shù),但是真正的作用是擴(kuò)充作用域:如此對(duì)象和方法不需要有任何的耦合關(guān)系
window.color = "red"; var o = { color : "blue"}; function sayColor(){ alert(this.color); } sayColor.call(this); //red sayColor.call(window); //red sayColor.call(o); //blue基本包裝類型(Boolean, Number, String)
我們知道,基本類型值不是對(duì)象,因此邏輯上應(yīng)該是沒有方法的。但是實(shí)際當(dāng)中Boolean, Number, String這三種在訪問/讀取的時(shí)候,會(huì)進(jìn)入一種“讀取模式”:創(chuàng)建實(shí)例 =》實(shí)例上調(diào)用方法 =》銷毀實(shí)例
這種讀取模式是隱性的,并且不建議顯示調(diào)用。因?yàn)闀?huì)讓人分不清是在處理基本類型還是引用類型。
直接調(diào)用基本包裝類型的構(gòu)造函數(shù),返回實(shí)例都屬于object
var value = Number("25"); alert(typeof value);// number var value2 = new Number("25"); alert(typeof value2);// object
new Object()這個(gè)構(gòu)造函數(shù)是會(huì)根據(jù)參數(shù)返回相應(yīng)的基本包裝類型的實(shí)例。說白了就是工廠模式唄
var obj = new Object("test"); alert(obj instanceof String) //trueBoolean基本包裝對(duì)象
很爛很爛很爛,不要去用
Number基本包裝對(duì)象num.toFixed(2); //精確兩位小數(shù) num.toExponential(2) //科學(xué)計(jì)數(shù)法保留兩位小數(shù) num.toPrecision(2) //看哪種格式方便,自動(dòng)返回fixed還是指數(shù)形式String基本包裝對(duì)象
字符方法:str.charAt(2); str[2]
操作方法:str.concat(); str.slice(), str.substring, str.substr()
后面三個(gè)都是返回一個(gè)新串串。都可以接受兩個(gè)參數(shù),slice()和substring()是[start,end],而substr是[start,length]
位置方法:str.indexOf(); str.lastIndexOf()
如果接受第二個(gè)參數(shù),表示從第幾位開始查起
trim方法: 去除開頭結(jié)尾的空格
大小寫轉(zhuǎn)換方法: toUpperCase(); toLowerCase()
少數(shù)語(yǔ)言(比如土耳其語(yǔ))會(huì)為Unicode來(lái)應(yīng)用特殊的轉(zhuǎn)換規(guī)則,所以最好用toLocalUpperCase()
模式匹配方法: str.match(pattern); str.replace(), str.split(),str.includes()
var mathces = pattern.exec(str) <==> str.match(pattern); var str = "cat,bat,fat"; //pattern一定要用全局模式g alert( str.replace(/(.at)/g, "word ($1)") ); //word (cat), word (bat), word (fat)
padding方法: str.padStart(), str.padEnd();
const fullNumber = "2034399002125581"; const last4Digits = fullNumber.slice(-4); const maskedNumber = last4Digits.padStart(fullNumber.length, "*"); //"************5581"單體內(nèi)置對(duì)象(Global, Math)
由ECMAScript實(shí)現(xiàn)提供的、不依賴于宿主環(huán)境的對(duì)象。
Global對(duì)象URI編碼方法: encodeURI(), encodeURIComponent()
//http://www.w3school.com.cn/My%20first/ encodeURI("http://www.w3school.com.cn/My first/") // http%3A%2F%2Fwww.w3school.com.cn%2FMy%20first%2F encodeURIComponent("http://www.w3school.com.cn/My first/"
eval()方法,執(zhí)行字符串代碼
var msg = "hello world"; eval("alert(msg)");
window對(duì)象
web瀏覽器都是把Global對(duì)象作為window對(duì)象的一部分來(lái)實(shí)現(xiàn)的。因此,在全局作用域中聲明的所有變量和函數(shù),都成為了window對(duì)象的屬性
Math對(duì)象的屬性
Math.E常量e,Math.PI常量圓周率
min(), max()接受多參數(shù)
// 這個(gè)技巧的關(guān)鍵是把Math對(duì)象作為第一個(gè)參數(shù),從而正確地設(shè)置this指針,然后吧values數(shù)組作為參數(shù) var values = [1,2,3,4,5]; var max = Math.max.apply(Math, values);
舍入方法
Math.ceil(); // 向上取整 Math.floor(); // 向下取整 Math.round(); // 四舍五入整數(shù)
隨機(jī)數(shù)random()
本質(zhì)是返回(0,1)的一個(gè)隨機(jī)數(shù)
值 = Math.floor( Math.random() * 可能值的總數(shù) + 第一個(gè)可能的值 );
其他方法
Math.abs(num); Math.pow(num,power); //num^power 三角函數(shù)、反三角函數(shù)等
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106863.html
摘要:而并不是父類對(duì)象的引用,而只是給編譯器的一個(gè)提示性質(zhì)的標(biāo)志?;蛘咦远x的提示在編譯的時(shí)候使用當(dāng)前子類的父類定義的構(gòu)造器去初始化當(dāng)前對(duì)象。所以,總結(jié)起來(lái),的用法歸為兩種一是可以調(diào)用父類構(gòu)造器,二是可以調(diào)用父類方法。 開篇Java是一門不那么簡(jiǎn)單也不那么復(fù)雜的語(yǔ)言,Java里面有很多問題和特性是容易被使用者忽視的,這些問題也許會(huì)難住新手,同時(shí)也許會(huì)是老手不小心跌入的無(wú)故之坑,只有精于對(duì)基礎(chǔ)...
摘要:前端入門的門檻相對(duì)較低,學(xué)習(xí)曲線是越來(lái)越陡峭,由淺入深,可以分為四個(gè)階段。第二階段高級(jí)程序設(shè)計(jì)有的書是用來(lái)成為經(jīng)典的,比如犀牛書還有些書是用來(lái)超越經(jīng)典的,顯然這本書就是。接下來(lái)可以看看教程,看看源代碼,嘗試著寫一寫這些效果。 前端入門的門檻相對(duì)較低,學(xué)習(xí)曲線是越來(lái)越陡峭,由淺入深,可以分為四個(gè)階段。 第一階段:《JavaScript DOM編程藝術(shù)》 看這本書之前,請(qǐng)先確認(rèn)你對(duì)J...
摘要:和的定義是指多少時(shí)間之后將回調(diào)函數(shù)加入到的執(zhí)行隊(duì)列之中回調(diào)函數(shù)是否立即執(zhí)行取決于當(dāng)前的執(zhí)行隊(duì)列是否空閑。比較好的例子如下回調(diào)函數(shù)執(zhí)行其他操作假如內(nèi)部的執(zhí)行時(shí)間為那么的回調(diào)函數(shù)至少要等待才執(zhí)行。 1、惰性加載函數(shù) (判斷各個(gè)瀏覽器中是否支持某個(gè)屬性) function addEvent(elem, type, handler){ if(elem.addEventListener...
摘要:然而,雖然先生對(duì)無(wú)所不知,被譽(yù)為世界的愛因斯坦,但他的語(yǔ)言精粹并不適合初學(xué)者學(xué)習(xí)。即便如此,在后面我還是會(huì)建議把當(dāng)做補(bǔ)充的學(xué)習(xí)資源。但目前為止,依然是學(xué)習(xí)編程的好幫手。周正則表達(dá)式,對(duì)象,事件,閱讀權(quán)威指南第,,,章。 既然你找到這篇文章來(lái),說明你是真心想學(xué)好JavaScript的。你沒有想錯(cuò),當(dāng)今如果要開發(fā)現(xiàn)代網(wǎng)站或web應(yīng)用(包括互聯(lián)網(wǎng)創(chuàng)業(yè)),都要學(xué)會(huì)JavaScript。而面對(duì)泛...
閱讀 2587·2021-11-22 09:34
閱讀 962·2021-11-19 11:34
閱讀 2815·2021-10-14 09:42
閱讀 1499·2021-09-22 15:27
閱讀 2399·2021-09-07 09:59
閱讀 1749·2021-08-27 13:13
閱讀 3442·2019-08-30 11:21
閱讀 784·2019-08-29 18:35