摘要:基本類(lèi)型基本類(lèi)型的比較就是值的比較訪問(wèn)是訪問(wèn)值本身不能定義方法和屬性保存在棧內(nèi)存中引用類(lèi)型除了基本類(lèi)型外,就是引用類(lèi)型了。
基本類(lèi)型
1、number
2、string
3、boolean
4、symbol
5、undefined
6、null
基本類(lèi)型的比較就是值的比較;訪問(wèn)是訪問(wèn)值本身;不能定義方法和屬性;保存在棧內(nèi)存中
JavaScript除了基本類(lèi)型外,就是引用類(lèi)型了。如Array、Function、Object、Date等等。
引用類(lèi)型可以定義屬性和方法;同時(shí)保存在棧內(nèi)存和堆內(nèi)存中;引用類(lèi)型的比較是內(nèi)存地址的比較。
為什么說(shuō)引用類(lèi)型同時(shí)保存在棧內(nèi)存和堆內(nèi)存中
let person = {name:"louis"} //person保存在棧內(nèi)存中,person就是這個(gè)引用對(duì)象的指針,通過(guò)這枚指針尋找到堆內(nèi)存的地址 //{name:"louis"} 保存在堆內(nèi)存中
引用類(lèi)型是如何比較的
let address = {details:"a"} let one = address let tow = address one === tow //true // 雖然one、tow是兩枚不同的指針,但它們都同時(shí)指向了堆內(nèi)存里的address的內(nèi)容,所以它們是相等的
再來(lái)一個(gè)例子
let person = {name:"louis} let man = {name:"louis"} person === man //false // person和man的內(nèi)容明明相同,為什么又不相等是因?yàn)樗齻兊膬?nèi)容雖然一樣,但是是在堆內(nèi)存里開(kāi)辟了兩個(gè)地方,所以它們指向的也是兩個(gè)不同的地方。可見(jiàn),引用類(lèi)型的比較是內(nèi)存地址的比較函數(shù)參數(shù)是引用類(lèi)型(對(duì)象)的時(shí)候會(huì)發(fā)生什么
還是一個(gè)例子
function test(person) { person.age = 26 person = { name: "aaa", age: 30 } return person } const p1 = { name: "bbb", age: 25 } const p2 = test(p1) p1 // {age:26,name:"bbb"} p2 // {age:30,name:"aaa"}
函數(shù)傳遞參數(shù)時(shí),實(shí)際上是傳遞指針的副本。
test(p1)實(shí)際上傳遞的就是p1的副本,這時(shí)指針仍然指向{name: "bbb",age: 25}
person.age = 26 這時(shí)修改的還是原來(lái)內(nèi)存位置的內(nèi)容,所以這時(shí)p1的age變成了26
當(dāng)person = {} .. 相當(dāng)于重新開(kāi)辟了一塊堆內(nèi)存,賦值{name:"aaa",age:30},最后返回這個(gè)對(duì)象,而這個(gè)對(duì)象的指針就是p2
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105343.html
摘要:例子中,屬于基本類(lèi)型對(duì)象。基本數(shù)據(jù)類(lèi)型和引用類(lèi)型作方法入?yún)r(shí)的差異通常,在函數(shù)調(diào)用時(shí),如果入?yún)榛緮?shù)據(jù)類(lèi)型時(shí),函數(shù)的參數(shù)將以值傳遞的方式傳遞。 前言:再次翻閱JS高程(第3版)過(guò)程中,看到了基本包裝類(lèi)型,趁熱留下此文,對(duì)JS的數(shù)據(jù)類(lèi)型做個(gè)較為深入的小結(jié)(2018-10-19)。 雖然JS與其他強(qiáng)類(lèi)型語(yǔ)言不一樣,聲明中無(wú)需預(yù)設(shè)數(shù)據(jù)類(lèi)型,但是JS也是有數(shù)據(jù)類(lèi)型區(qū)分的。 基本數(shù)據(jù)類(lèi)型(...
摘要:這也解答了我曾經(jīng)的一個(gè)疑問(wèn)同樣的道理,在調(diào)用屬性的瞬間,也是使用先來(lái)實(shí)例化一個(gè)對(duì)象,所以那一瞬間他們的構(gòu)造函數(shù)以及原型對(duì)象是相同的,但也僅僅是那一瞬間。 經(jīng)常在國(guó)內(nèi)的各大網(wǎng)站博客上看到一句話,叫做JS中萬(wàn)物皆對(duì)象,那是否真是如此? 那么,我們先來(lái)捋一捋JS中的數(shù)據(jù)類(lèi)型,JS中的數(shù)據(jù)類(lèi)型有下面幾種 Undefined Null Boolean Number String Symbol ...
摘要:熟悉的同學(xué)都知道,它的數(shù)據(jù)類(lèi)型一般分為基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型復(fù)雜數(shù)據(jù)類(lèi)型?;緮?shù)據(jù)類(lèi)型基本數(shù)據(jù)類(lèi)型有種新增。動(dòng)態(tài)的屬性基本數(shù)據(jù)類(lèi)型的值是沒(méi)有辦法添加屬性和方法的。類(lèi)型檢測(cè)根據(jù)它的原型鏈來(lái)識(shí)別引用類(lèi)型。 熟悉js的同學(xué)都知道,它的數(shù)據(jù)類(lèi)型一般分為基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型(復(fù)雜數(shù)據(jù)類(lèi)型)。那么他們之間到底有什么不同?從下面這個(gè)例子入手: var a = 1; ...
摘要:也就是說(shuō)基本類(lèi)型在賦值操作后,兩個(gè)變量是相互不受影響的。前面講引用類(lèi)型的時(shí)候提到,保存在變量中的是對(duì)象在堆內(nèi)存中的地址,所以,與簡(jiǎn)單賦值不同,這個(gè)值的副本實(shí)際上是一個(gè)指針,而這個(gè)指針指向存儲(chǔ)在堆內(nèi)存的一個(gè)對(duì)象。 ECMAScirpt 變量有兩種不同的數(shù)據(jù)類(lèi)型:基本類(lèi)型,引用類(lèi)型。也有其他的叫法,比如原始類(lèi)型和對(duì)象類(lèi)型,擁有方法的類(lèi)型和不能擁有方法的類(lèi)型,還可以分為可變類(lèi)型和不可變類(lèi)型,...
摘要:從入門(mén)到放棄基本類(lèi)型和引用類(lèi)型有七種數(shù)據(jù)類(lèi)型而的變量根據(jù)指向數(shù)據(jù)類(lèi)型的不同也分為兩種類(lèi)型一種基本類(lèi)型一種引用類(lèi)型基本類(lèi)型基本類(lèi)型包括這五種但凡變量指向這五種數(shù)據(jù)類(lèi)型的都稱(chēng)之為基本類(lèi)型假設(shè)有以上變量那么他們?cè)趦?nèi)存中棧區(qū)的存儲(chǔ)結(jié)構(gòu)大概是這樣子 JS從入門(mén)到放棄-基本類(lèi)型和引用類(lèi)型 JS有number,string,null,undefined,boolean,array,object七種數(shù)...
摘要:每當(dāng)讀取這個(gè)基本類(lèi)型時(shí),后臺(tái)會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的基本包裝類(lèi)型的對(duì)象。類(lèi)型判斷主要是用來(lái)判斷基本數(shù)據(jù)類(lèi)型返回類(lèi)型新增所以只能用來(lái)判斷基本數(shù)據(jù)類(lèi)型。引用類(lèi)型基本包裝類(lèi)型都會(huì)返回。 最近重溫JS高程設(shè)計(jì)以及與朋友的討論。決定趁熱打鐵記錄JS的各種類(lèi)型,并做下深入總結(jié)。 js的幾種類(lèi)型 基本類(lèi)型:Boolean、String、Number、Null、Undefined 引用類(lèi)型: 2.1 O...
閱讀 1872·2023-04-26 01:58
閱讀 1994·2019-08-30 11:26
閱讀 2737·2019-08-29 12:51
閱讀 3505·2019-08-29 11:11
閱讀 1192·2019-08-26 11:54
閱讀 2106·2019-08-26 11:48
閱讀 3489·2019-08-26 10:23
閱讀 2392·2019-08-23 18:30