国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js 深入 —— 從數(shù)據(jù)類型到原型鏈

FWHeart / 3147人閱讀

摘要:檢測數(shù)據(jù)類型中可以使用操作符來判斷數(shù)據(jù)類型。調(diào)用函數(shù)時(shí),某個(gè)參數(shù)未設(shè)置任何值,這時(shí)就可以傳入,表示該參數(shù)為空。我們約定普通函數(shù)以小寫字母開頭,構(gòu)造函數(shù)以大寫字母開頭。五原型以及原型鏈未完待續(xù)

一、數(shù)據(jù)類型
javascript中的數(shù)據(jù)類型可以分為兩種類型,基本數(shù)據(jù)類型引用數(shù)據(jù)類型。其中基本數(shù)據(jù)類型包括String, Number, Boolean,null,undefined,Symbol(ES6)六大數(shù)據(jù)類型,引用數(shù)據(jù)類型object

通常,數(shù)值、字符串、布爾值這三種類型,合稱為原始類型,

對(duì)象則稱為合成類型(complex type)的值,因?yàn)橐粋€(gè)對(duì)象往往是多個(gè)原始類型的值的合成,可以看作是一個(gè)存放各種值的容器。

至于undefined和null,一般將它們看成兩個(gè)特殊值。

這里所講的合成類型object,其實(shí)式一個(gè)廣義的對(duì)象,他包括三個(gè)子類型,[狹義的對(duì)象arrayfunction]

我們一般所說的對(duì)象都是狹義的對(duì)象。

基本數(shù)據(jù)類型是按照值進(jìn)行分配的,是存放在了棧內(nèi)存的數(shù)據(jù)片段,可以直接訪問到。引用數(shù)據(jù)類型則是存放在堆內(nèi)存中的數(shù)據(jù),例如: var a = {}; a只是存儲(chǔ)了{(lán)}的指針,這個(gè)指針指向了內(nèi)存的地址。

檢測數(shù)據(jù)類型

javascript中可以使用typeof操作符來判斷數(shù)據(jù)類型。但是typeof null = object; 這是歷史遺留的bug;

typeof 123;               // "number"
typeof "hfhan";           // "string"
typeof true;              // "boolean"
typeof null;              // "object"  獨(dú)一份的與眾不同
typeof undefined;         // "undefined"
typeof Symbol("hfhan");   // "symbol"
typeof function(){};      // "function"   // 這里不是object哦~~~
typeof {};                // "object"
typeof window             // "object"
typeof {}                 // "object"
typeof []                 // "object"

null是一個(gè)表示“空”的對(duì)象,轉(zhuǎn)為數(shù)值時(shí)為0undefined是一個(gè)表示”此處無定義”的原始值,轉(zhuǎn)為數(shù)值時(shí)為NaN

null和undefined的用法于含義

null表示空值,即該處的值現(xiàn)在為空。調(diào)用函數(shù)時(shí),某個(gè)參數(shù)未設(shè)置任何值,這時(shí)就可以傳入null,表示該參數(shù)為空。比如,某個(gè)函數(shù)接受引擎拋出的錯(cuò)誤作為參數(shù),如果運(yùn)行過程中未出錯(cuò),那么這個(gè)參數(shù)就會(huì)傳入null,表示未發(fā)生錯(cuò)誤。

undefined表示“未定義”,下面是返回undefined的典型場景。

// 變量聲明了,但沒有賦值
var i;
i // undefined

// 調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于 undefined
function f(x) {
  return x;
}
f() // undefined

// 對(duì)象沒有賦值的屬性
var  o = new Object();
o.p // undefined

// 函數(shù)沒有返回值時(shí),默認(rèn)返回 undefined
function f() {}
f() // undefined
可以轉(zhuǎn)換為false的值
undefined
null
false
0
NaN
""或""(空字符串)
二、對(duì)象類型

宿主環(huán)境

一般宿主環(huán)境由外殼程序創(chuàng)建于維護(hù),只要是能夠提供js引擎執(zhí)行環(huán)境都稱為是外殼程序。如:web 瀏覽器, 桌面應(yīng)用程序等。

即由web瀏覽器、桌面應(yīng)用程序等的外殼程序所造就的環(huán)境就是宿主環(huán)境

js對(duì)象的分類

js的對(duì)象可以分為三類:內(nèi)部對(duì)象 宿主對(duì)象 自定義對(duì)象

1. 內(nèi)部對(duì)象

1.1 本地對(duì)象

ECMA-262把本地對(duì)象定義為是: 獨(dú)立于宿主環(huán)境的ECMASCRIPT實(shí)現(xiàn)所提供的對(duì)象。

本地對(duì)象包含Object Function Boolean String Array Date RegExp Number 以及各類錯(cuò)誤對(duì)象(Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError

1.2 內(nèi)置對(duì)象

ECMA-262把內(nèi)置對(duì)象定義為是: 由 ECMAScript 實(shí)現(xiàn)提供的、獨(dú)立于宿主環(huán)境的所有對(duì)象,在 ECMAScript 程序開始執(zhí)行時(shí)出現(xiàn)。意味著你不需要明確實(shí)例化就可以是直接使用。

包括由 Global Math兩個(gè)內(nèi)置對(duì)象。

global

global對(duì)象算是一個(gè)比較特殊的對(duì)象了吧,因?yàn)椴还苣銖哪膫€(gè)角度看,它都是不存在的。全局作用域下的一些屬性和方法比如: isNaN parseInt等。都是global的屬性和方法。
JavaScript 全局對(duì)象參考手冊(cè)

2. 宿主對(duì)象

宿主對(duì)象就是執(zhí)行JS腳本的環(huán)境提供的對(duì)象。對(duì)于嵌入到網(wǎng)頁中的JS來說,其宿主對(duì)象就是瀏覽器提供的對(duì)象,所以又稱為瀏覽器對(duì)象(BOM)

不同的瀏覽器提供的宿主對(duì)象可能不同,即使提供的對(duì)象相同,其實(shí)現(xiàn)方式也大相徑庭!這會(huì)帶來瀏覽器兼容問題,增加開發(fā)難度。

瀏覽器對(duì)象有很多,如WindowDocument等等。

對(duì)于web瀏覽器而言,Global有一個(gè)代言人window,但是window并不是ECMAScripta規(guī)定的內(nèi)置對(duì)象,因?yàn)閣indow對(duì)象是相對(duì)于web瀏覽器而言的,而js不僅僅可以用在瀏覽器中。

document對(duì)象是window對(duì)象的一個(gè)屬性,是顯示于窗口內(nèi)的一個(gè)文檔。而window對(duì)象則是一個(gè)頂層對(duì)象,它不是另一個(gè)對(duì)象的屬性。document可以理解為文檔,就是你的網(wǎng)頁,而window是你的窗口,就是你的瀏覽器打開所顯示的哪個(gè)窗口。

3. 自定義對(duì)象

顧名思義,就是開發(fā)人員自己定義的對(duì)象。JavaScrip允許使用自定義對(duì)象,使JavaScript應(yīng)用及功能得到擴(kuò)充

三、判斷對(duì)象的類型

使用Object.prototype.toString()來判斷。

Object.prototype.toString.apply(new Function); // "[object Function]"
Object.prototype.toString.apply(new Object);       // "[object Object]"
Object.prototype.toString.apply(new Date);         // "[object Date]"
Object.prototype.toString.apply(new Array);        // "[object Array]"
Object.prototype.toString.apply(new RegExp);       // "[object RegExp]"
Object.prototype.toString.apply(new ArrayBuffer);  // "[object ArrayBuffer]"
Object.prototype.toString.apply(Math);             // "[object Math]"
Object.prototype.toString.apply(JSON);             // "[object JSON]"
var promise = new Promise(function(resolve, reject) {
    resolve();
});
Object.prototype.toString.apply(promise);          // "[object Promise]"

下面正式進(jìn)入我們的正題

四、構(gòu)造函數(shù)

在javascript中對(duì)象的創(chuàng)建有兩種方式,對(duì)象字面量構(gòu)造函數(shù)

4.1 對(duì)象字面量

var o1 = {  
    p:”I’m in Object literal”,  
    alertP:function(){  
        alert(this.p);  
    }  
}  
// 這種寫法不需要定義構(gòu)造函數(shù),因此不在本文的討論范圍之內(nèi)。這種寫法的缺點(diǎn)是,每創(chuàng)建一個(gè)新的對(duì)象都需要寫出完整的定義語句,不便于創(chuàng)建大量相同類型的對(duì)象,不利于使用繼承等高級(jí)特性。

4.2 構(gòu)造函數(shù)(構(gòu)造器)

new表達(dá)式是配合構(gòu)造函數(shù)使用,可以實(shí)現(xiàn)更好的效果

new String(“a string”)
// 調(diào)用內(nèi)置的String()方法來構(gòu)建了一個(gè)字符串對(duì)象。



function CO(){  
    this.p = “I’m in constructed object”;  
    this.alertP = function(){  
        alert(this.p);  
    }  
}  
var o2 = new CO();  
針對(duì)new操作符號(hào)在調(diào)用構(gòu)造函數(shù),我們來刨析一下具體發(fā)生了什么

發(fā)生了四件事

var obj = {}; // 第一步創(chuàng)建一個(gè)空對(duì)象
obj.__proto__ = CO.prototype; // 讓空對(duì)象的成員指向構(gòu)造函數(shù)的prototype成員對(duì)象
CO.call(obj); // 第三步,將構(gòu)造函數(shù)的作用域賦值給新的對(duì)象
return obj; // 返回新的對(duì)象

注意

function C2(a, b){  
    this.p = a + b;  
    this.alertP = function(){  
        alert(this.p);  
    }  
    return this.p;//此返回語句在C2作為構(gòu)造函數(shù)時(shí)沒有意義  
}  
var c2 = new C2(2,3);  
c2.alertP();//結(jié)果為5  
alert(C2(2, 3)); //結(jié)果為5  

// 該實(shí)例是可行的,但是不推薦哦,
// 該函數(shù)既可以用作構(gòu)造函數(shù)來構(gòu)造一個(gè)對(duì)象,也可以作為普通的函數(shù)來使用。用作普通函數(shù)時(shí),它接收兩個(gè)參數(shù),并返回兩者的相加的結(jié)果。為了代碼的可讀性和可維護(hù)性,建議作為構(gòu)造函數(shù)的函數(shù)不要摻雜除構(gòu)造作用以外的代碼;同樣的,一般的功能函數(shù)也不要用作構(gòu)造對(duì)象。

以上兩種方式中展現(xiàn)的都是我們自定義的對(duì)象,看了兩種創(chuàng)建對(duì)象對(duì)的方式,我們來結(jié)合內(nèi)部對(duì)象來繼續(xù)分析:

4.3 普通創(chuàng)建法

一個(gè)函數(shù)可以通過下面的方式直接創(chuàng)建。

function a(){

}

創(chuàng)建一個(gè)對(duì)象例如是object 可以是 {} ,創(chuàng)建數(shù)組可以是[], 創(chuàng)建正則可以是/.*/

4.4 構(gòu)造函數(shù)創(chuàng)建對(duì)象

var a = new Function(){

}
var b = new Object({a:1})
var c = new Array(10)
var d = new Date()
var e = new Set()

我們直接(new)使用內(nèi)部對(duì)象的構(gòu)造函數(shù)就可以創(chuàng)建一個(gè)對(duì)象了。

// 除了內(nèi)置的一些對(duì)象之外,我們還可以使用普通的函數(shù)來構(gòu)建對(duì)象。

function person (){
}

var p1 = new Person();

我們約定普通函數(shù)以小寫字母開頭,構(gòu)造函數(shù)以大寫字母開頭。

五、原型以及原型鏈

未完待續(xù)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/94354.html

相關(guān)文章

  • JS程序

    摘要:設(shè)計(jì)模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時(shí)候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計(jì)模式必須要先搞懂面向?qū)ο缶幊蹋駝t只會(huì)讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學(xué)習(xí)總結(jié)。知識(shí)只有分享才有存在的意義。 是時(shí)候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...

    melody_lql 評(píng)論0 收藏0
  • 深入理解JavaScript

    摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...

    myeveryheart 評(píng)論0 收藏0
  • 關(guān)于個(gè)人第一天前端面試的面試問答QA,希望能對(duì)其他找前端工作的朋友有所幫助。

    摘要:兩日前,發(fā)了一篇吐槽,莫名的火了一把。關(guān)于的第一個(gè),其實(shí)就是聲明一個(gè)常量,不允許變更。另外對(duì)象迭代這里出自,阮一峰大神寫的入門指南,對(duì)象篇。 兩日前,發(fā)了一篇吐槽,莫名的火了一把。經(jīng)過大家的建議與鼓勵(lì),于是修改了簡歷,開始了重新投遞,2天后接到第一份面試邀請(qǐng)。 此文為個(gè)人面試經(jīng)歷,QA問答過程與總結(jié),不透露面試公司及面試人員,內(nèi)容真實(shí),如果有面試過我的大佬看到博客,歡迎指出問題。 循序...

    Youngdze 評(píng)論0 收藏0
  • JS原型原型深入理解

    摘要:如果要理清原型和原型鏈的關(guān)系,首先要明確一下幾個(gè)概念中的所有東西都是對(duì)象,函數(shù)也是對(duì)象而且是一種特殊的對(duì)象中所有的東西都由衍生而來即所有東西原型鏈的終點(diǎn)指向?qū)ο蠖加幸粋€(gè)隱藏的屬性,他指向創(chuàng)建它的構(gòu)造函數(shù)的原型,但是有一個(gè)例外,指向的是。 首先要搞明白幾個(gè)概念: 函數(shù)(function) 函數(shù)對(duì)象(function object) 本地對(duì)象(native object) 內(nèi)置對(duì)象(bu...

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

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

0條評(píng)論

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