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