javascript
JavaScript 引用类型 读书笔记
● Object 類型
● Array類型
● Date類型
● RegExp類型
● Function類型
● 基本包裝類型
● 單體內置對象
Object類型
創建對象: 使用`new Object`或者直接使用**字面量**`var obj={}` 字面量定義對象**不會**調用Object構造函數 訪問對象屬性: 使用點 `.` 或者方括號內字符串 `obj["key"]` 使用 *value* `instenceof` ***Object*** 可以引來判斷對象 var s="hello"; var arr=[1,2,3,4,5]; console.log(s instanceof Array); //false 對于基本類型,instanceof 總是返回 false console.log(ob instanceof Array); //trueArray類型
使用Array構造函數時可以省略 `new` 操作符. 修改`length`屬性可以直接改變數組的長度. 如果數組的索引超過了當前數組, 也會直接改變數組的長度. *可以使用`arr[arr.length]`在數組末尾添加新項 var arr = [1,2,3,4,5]; //字面量創建 var arr = Array(5) //創建數組長度為5的空數組 var arr = Array(1,2,3,4,5) //使用構造函數創建| Array.isArray(arr) | 判斷某個值是不是數組 返回 true/false |
| arr.toString() | 返回數組中每個值的字符串形式 |
| arr.toLocaleString() | 根據所在區域的字符串形式返回字符串 |
| arr.valueOf() | 返回當前數組 |
| arr.join(separator) | separator參數可選, 按指定的連接方式返回字符串,元素的連接符號為傳入的參數, 默認為逗號。 null 和 undefined 用空格表示, 不會改變原有的數組。 |
| arr.push(value)棧方法 壓 | 接收任意數量的參數, 把他們逐個添加到數組末尾, 返回修改后的數組長度 |
| arr.pop()棧方法 彈出 | 從數組末尾移除一項, length 的值-1,返回移除的項 |
| arr.unshift(value)隊列方法 | 接收任意數量的參數, 把他們逐個添加到數組前端, 返回修改后的數組長度 |
| arr.shift()隊列方法 | 從數組前端移除一項, length 的值-1,返回移除的項 |
| arr.reverse()反轉數組 | 反轉當前數組元素的順序,會直接改變當前的數組順序 |
| arr.sort(fucntion)重排序 | 接收一個函數,該函數接收2個參數,根據該函數的返回值重新排序數組,會改變當前的數組順序 如果返回正數,則第一個參數在第二個參數之前;如果返回0,則位置相等; 如果返回負數,則第一個參數在第二個參數之后。 *可以使用return value2-value1 比較數字大小 |
| arr.concat(value)連接數組 | 將接收的參數放到數組末尾,返回一個新的數組, 不會改變原有的數組。 |
| arr.slice(star,end)截取數組 | 只有一個參數的情況下, 會截取從該參數指定的位置開始到數組結束 有兩個參數的情況下,會截取從star指定的位置開始到end指定的位置的前一個元素, 不包括end。 *如果值為負數, 則實際的值為 length 加上該負值。不會改變原有的數組。 |
| arr.splice(index,num,add1*…) 刪除/插入數組 | 第1個參數為要操作(刪除/插入)的起始位置, 第2個參數為要刪除的個數, 從第3開始的參數為要插入的元素,使用前插法,即插入的項目會在操作位置之前 *會改變原有的數組, 返回值為被刪除的元素。 |
| arr.indexOf(item,index)查找數組 | 參數分別為: 要查找的元素, 從哪里開始查找(下標)。從數組開頭往后方向查找。 返回該元素第一次出現的位置(下標), 如果未找到,則返回-1。*使用===全等操作。 |
| arr.lastIndexOf(item,index) | 同indexOf,不過是從數組末尾往前方向查找。 |
| arr.every(fun,this) | 如果函數對每一項都返回true,則 every() 返回 true,否則返回false |
| arr.some(fun,this) | 如果函數對任一項返回true,則 some() 返回 true,否則返回false |
| arr.filter(fun,this) | 對每一項運行函數,filter()會返回函數運行結果為true的元素組成的數組 |
| arr.map(fun,this) | 對每一項運行函數,map()會返回每次函數調用結果組成的數組 |
| arr.forEach(fun,this) | 單純對每一項運行函數,forEach() 沒有返回值 |
| arr.reduce(fun,initvalue) | 接收2個參數,分別為每一項上調用的函數, 歸并的初始值**(可選) 傳入的函數接收4**個參數分別為: 前一個值, 當前值, 當前項的索引, 數組對象本身 從第一項遍歷到最后一項, 函數返回的任何值都會傳遞給下一項。 |
| arr.reduceRight(fun,initvalue) | 同reduce,不過遍歷方向是從最后一項到第一項。 |
Date類型
創建一個日期對象: var date = new Date() //創建當前日期的Date對象如果要創建指定日期和事件的Date對象, 則必須傳入毫秒數(Number類型), 該毫秒數為1970年1月1日 0:00:00起至該日期經過的毫秒數。
var date = new Date(Date.parse("2018/8/8 12:00:00")); // 2018年8月8日 12:00:00 var date2= new Date(Date.UTC(2018,7,8,12,00,00)); // 2018年8月8日 12:00:00 var date2= new Date(1533700800000) // 2018年8月8日 12:00:00| Date.parse(string) | 接收一個用字符串表示的日期, 返回毫秒數。 如果字符串不能表示日期, 則返回 NaN |
| Date.UTC(年,月-1,天,時,分,秒,毫秒) | 傳入參數表示日期, 月份是從0開始算的(一月是0,十二月是11) 前2個參數是必須的, 后面的參數如果省略, 則設為0。返回毫秒數 |
| Date.now() | 返回調用這個方法時的日期時間的毫秒數 *如果瀏覽器不支持, 也可以使用+new Date把當前日期的Data對象轉為Number類型 |
| date.toString() | 返回字符串形式的日期 Wed Aug 08 2018 12:00:00 GMT+0800 (中國標準時間) |
| date.toLocaleString() | 根據所在區域的返回字符串形式的日期 2018/8/8 下午12:00:00 |
| date.valueOf() | 返回當前日期的毫秒數形式 1533700800000 |
RegExp類型
創建正則表達式:var exp=/express/flags;每個正則表達式都可帶有標志(flags):
g 表示全局模式, 會應用于所有字符串, 每次調用后, index不會歸0。
i 表示不區分大小寫。
m 表示多行模式, 在到達文本末尾時還會繼續查找下一行。
javascript 正則表達式不支持后發斷言。
RegExp對象的 toString() 和 toLocaleString() 方法都會返回正則表達式的字面量形式, 與創建方式無關。
| global | 布爾值,表示是否設置了g標志 |
| ignoreCase | 布爾值,表示是否設置了i標志 |
| multiline | 布爾值,表示是否設置了m標志 |
| lastIndex | 整數,表示開始搜索下一個匹配項的字符位置 (匹配項的下一個元素) |
| source | 正則表達式的字符串表示 |
| exp.exec(string) | 接收一個字符串參數, 返回包含第一個匹配項的數組 |
| exp.test(string) | 接收一個字符串參數, 如果有匹配項, 返回true, 否則返回false |
| RegExp.input 或RegExp[$_] | 最近一次要匹配的字符串 |
| RegExp.lastMatch 或RegExp["$&"] | 最近一次的匹配項 |
| RegExp.lastparen 或RegExp["$+"] | 最近一次匹配的捕獲組(一對括號就是一個捕獲組) |
| RegExp.leftContext或RegExp["$`"]|inpu字符串中lastparen之前的位置 | |
| RegExp.rightContext或RegExp["$'"] | inpu字符串中lastparen之后邊的位置 |
| RegExp.multiline或RegExp["$*"] | 布爾值,是否所有的表達式都使用多行模式 |
*非有效的ECMAScript標識符要用方括號語法訪問
Function類型
- 函數名實際上是一個指向函數對象的指針。
- 使用不帶括號的函數名是訪問函數指針, 而非調用函數。
- 重復定義函數, 后面的函數會覆蓋前面的函數。
- 函數聲明會得到變量提升, 未執行之前可以使用。函數表達式則不會, 必須執行到它所在的代碼, 才能使用。
- 函數可以作為參數傳遞給另一個函數, 也可以將函數作為另一個函數的結果返回。
callee屬性
`callee`屬性是一個指針,指向擁有argument對象的函數(當前函數),常用于遞歸函數, 分離函數的執行與函數名。 **不能用于嚴格模式!** function fun(x,y){argument.callee() //指向fun函數(函數本身) }caller屬性
`caller`屬性保存調用當前函數的函數的引用 (誰調用了它) , 在全局作用域中調用, 會返回 `null` 。 **不能用于嚴格模式!** ```js function fun(){ return fun.caller; } function otherfunction(){ console.log(fun()); } console.log(fun()); //null otherfunction(); //otherfunction ```this屬性
`this`指向函數執行的環境對象( 函數本身所在的作用域 )。 在**全局**作用域中調用, `this`指向`window`。**嚴格模式**下, 全局環境中的`this`指向`undefined`。 window.color="red"; var o={color."blue"};function sayColor(){alert(this.color); //this指向函數本身所在的作用域 }sayColor(); //此時函數本身的作用域是window, 所以返回"red" o.sayColor=sayColor; o.sayColor(); //o.sayColor()的作用域是o對象, 所以返回"blue"length屬性和prototype屬性
`length`屬性表示函數希望接收的**命名參數**的個數。 `prototype`屬性保存著所有實例的方法, 無法枚舉。apply方法
apply方法接收2個參數, 一個是運行函數的作用域 (讓this指向哪里) , 另一個是參數數組。 apply需要把參數打包成**數組**傳入。call方法
同apply, 不同的地方是call的參數是**逐個**傳給函數。這2個方法都可用來擴大作用域。bind方法
bind方法會創建一個函數實例, 然后其`this`的值會被綁定傳給bind()函數的值。 var o={color."blue"}; function sayColor(){alert(this.color); } var objectSayColor=sayColor.bind(o); //將對象o作為objectSayColor函數的this基本包裝類型
基本包裝類型有:`Boolean`、`Number`、`String`。 每當讀取一個基本類型的值時, 后臺就會創建一個對應的基本包裝類型。 自動創建的基本包裝類型只存在于代碼執行瞬間, 然后立即被摧毀, 所以不能在運行時添加屬性和方法。Boolean類型
var bo1 = new Boolean(false); //創建一個Boolean類型的基本包裝對象, 初始值為false var bo2 = new Boolean(2); //2會被自動轉為true var bo3 = true; //字面量創建的Boolean基本類型 alert(bo1 && true) //返回true, 因為布爾表達式中 對象 會被轉為true, 不論其初始值 //盡量不要使用Boolean構造函數, 容易造成誤解。 typeof bo1; //object (對象) typeof bo3; //boolean (基本類型) typeof bo2.valueOf() //booleanBoolean對象的 valueOf() 方法會返回基本類型的true 或者 false。
Number類型
```js var value = 25; var number = Number(value); //轉換為數字的函數 Number() alert(typeof number); //number (基本類型)var obj = new Number(value); //使用構造函數 new Number()
alert(typeof obj); //object (基本包裝類型的對象)
var text = “cat, bat, sat, fat”;
//第一個參數為字符串, 所以只會替換第一個匹配項
var result = text.replace(“at”,“ond”); //“cond,bat,sat,fat”
//第一個參數是正則表達式, 并且指定g標志, 所以會替換所有的匹配項
result=text.replace(/at/g,“ond”) //“cond,bond,sond,fond”
var s=“cat,bat,hat,rat”
var r=s.replace(/.at/g,function(){
console.log(arguments[0]); //模式匹配項(此時是"cat")
console.log(arguments[1]);
console.log(arguments[2]);
console.log(arguments[3]);
console.log(“倒數第二個參數”+arguments[arguments.length-2]); //模式匹配項在字符中的位置
console.log(“最后一個參數”+arguments[arguments.length-1]); //原始字符串
return “ing”
})
console.log? // “cing,bing,hing,ring”
總結
以上是生活随笔為你收集整理的JavaScript 引用类型 读书笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷 1938 [USACO09NOV
- 下一篇: 软件测试人员必备的32个网站清单,果断收