成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript高級(jí)程序設(shè)計(jì) - CH5

bang590 / 1723人閱讀

摘要:在使用字面量表示法的時(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)訪問屬性。

2.Array類型

·[].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(); //blue
Function的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) //true

Boolean基本包裝對(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對(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

相關(guān)文章

  • Java基礎(chǔ):Java核心技術(shù)提示的易忽略點(diǎn) Ch5

    摘要:而并不是父類對(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ǔ)...

    weapon 評(píng)論0 收藏0
  • JavaScript進(jìn)階之路

    摘要:前端入門的門檻相對(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...

    Lowky 評(píng)論0 收藏0
  • JavaScript高級(jí)程序設(shè)計(jì)》22章 JavaScript高級(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...

    wanglu1209 評(píng)論0 收藏0
  • 如何正確學(xué)習(xí)JavaScript

    摘要:然而,雖然先生對(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ì)泛...

    canger 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<