欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于ECMAScript中的原始值和引用值詳解

 更新時(shí)間:2021年08月04日 14:16:46   作者:木亦Sam  
在ECMAScript中,變量可以存在兩種類型的值,即原始值和引用,這篇這篇文章主要給大家介紹了關(guān)于ECMAScript中的原始值和引用值的相關(guān)資料,需要的朋友可以參考下

前言

這應(yīng)該是很基礎(chǔ)的 JavaScript 的知識(shí)點(diǎn),但估計(jì)很多小伙伴都只是簡(jiǎn)單帶過(guò),到面試時(shí)一問(wèn)三不知。這里結(jié)合我之前的筆記,再簡(jiǎn)單的介紹下原始值和引用值的相關(guān)知識(shí),來(lái),開(kāi)始。

ECMAScript 規(guī)定變量可以包含兩種數(shù)據(jù)類型,要么是原始值(primitive value),要么是引用值(reference value),原始值即為最簡(jiǎn)單的數(shù)據(jù)構(gòu)成,而引用值是指由多個(gè)值構(gòu)成的對(duì)象。

一共包含六種原始值,分別是:Undefined、Null、Boolean、Number、String和 Symbol,操作原始值就是操作存儲(chǔ)變量中的實(shí)際值。

而引用值這玩意呢,它是保存在內(nèi)存中的對(duì)象,由于 JavaScript 是不能直接訪問(wèn)內(nèi)存位置的,因此也就不能直接操作對(duì)象所在的內(nèi)存空間,當(dāng)你操作對(duì)象的時(shí)候,實(shí)際也就是操作的對(duì)象的引用,而不是這個(gè)對(duì)象本身。

什么是動(dòng)態(tài)屬性

動(dòng)態(tài)屬性是指在創(chuàng)建一個(gè)引用值后,可以動(dòng)態(tài)地添加、修改、刪除其屬性和方法。示例:

let obj = new Object();
obj.name = "Sam";

console.log(obj.name); // "Sam"

釋義:首先創(chuàng)建一個(gè)引用值對(duì)象,并把它保存在變量 obj 中,第二步賦予 obj 一個(gè) name 屬性,值為“Sam”。除非這個(gè)屬性被修改/刪除,不然你是可以直接打印或者訪問(wèn)這個(gè)屬性的。

原始值不能帶有屬性,盡管在給它進(jìn)行屬性操作的時(shí)候不會(huì)報(bào)錯(cuò)。示例:

let me = "Sam";
me.sex = "男";

console.log(me.sex); // undefined

這里使用的是字面量的形式初始化,因此盡管給 me 賦予了 sex 屬性,也是無(wú)濟(jì)于事的,無(wú)法訪問(wèn)該屬性。
如果是使用 new 關(guān)鍵字初始化原始值,JavaScript 則會(huì)創(chuàng)建一個(gè) Object 實(shí)例。示例:

let me = new String("Sam");
me.sex = "男";

console.log(me.sex); // "男"

值的復(fù)制

原始值和引用值在通過(guò)變量復(fù)制時(shí)也有所不同,原始值會(huì)被復(fù)制到一個(gè)新的變量,而引用值實(shí)際上是復(fù)制了值的指針。示例:

let name = "Sam";
let myName = name;

console.log(myName); // "Sam"

當(dāng) myName 初始化為 name 時(shí),“Sam”也會(huì)被復(fù)制到 myName 中,與 name 相互獨(dú)立,互不干擾,可以理解為 myName 是 name 的副本。

而引用值的復(fù)制,實(shí)際是復(fù)制了一個(gè)指針,指向堆內(nèi)存中的對(duì)象,對(duì)復(fù)制后的變量進(jìn)行屬性操作,實(shí)際也是操作的被復(fù)制的對(duì)象,兩個(gè)變量實(shí)際上是指同一對(duì)象。示例:

let me = new Object();
let you = me;

me.name = "Sam";

console.log(you.name); // "Sam"

判斷值類型

我們經(jīng)常使用 typeof 來(lái)判斷一個(gè)變量的類型,對(duì)判斷原始值的類型很有用,但如果是用來(lái)判斷引用值,卻顯得用處不大,因?yàn)閷?duì)于引用值和 null,typeof 都是返回的 object。

通常情況下,我們需要確切知道,這是一個(gè)什么類型的對(duì)象,于是便有了 instanceof 操作符。語(yǔ)法為:

result = variable instanceof constructor

instanceof 返回一個(gè) Boolean 值。示例:

console.log(person instanceof Object);  
// 變量 person 是 Object 嗎?

console.log(colors instanceof Array);   
// 變量 colors 是 Array 嗎?

console.log(pattern instanceof RegExp); 
// 變量 pattern 是 RegExp 嗎?

如果使用 instanceof 檢測(cè)原始值,則會(huì)始終返回 false,因?yàn)樵贾挡皇菍?duì)象。

總結(jié)

到此這篇關(guān)于關(guān)于ECMAScript中的原始值和引用值的文章就介紹到這了,更多相關(guān)ECMAScript原始值和引用值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文詳解JavaScript中this指向的問(wèn)題

    一文詳解JavaScript中this指向的問(wèn)題

    JavaScript中this指向的問(wèn)題是面試中常常會(huì)問(wèn)到的,所以本文就來(lái)通過(guò)一些簡(jiǎn)單的示例為大家詳細(xì)講講,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2023-04-04
  • range 標(biāo)準(zhǔn)化之獲取

    range 標(biāo)準(zhǔn)化之獲取

    range 是用戶選擇區(qū)域的唯一表示方法,存在 w3c 的標(biāo)準(zhǔn)化 range ,以及 ie 特有的 textrange 與 controlrange ,相對(duì)于 ie ,w3c 的概念更易于理解,首先簡(jiǎn)要介紹一下 w3c range.
    2011-08-08
  • bootstrap suggest搜索建議插件使用詳解

    bootstrap suggest搜索建議插件使用詳解

    這篇文章主要為大家詳細(xì)介紹了bootstrap suggest搜索建議插件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 淺談js在html中的加載執(zhí)行順序,多個(gè)jquery ready執(zhí)行順序

    淺談js在html中的加載執(zhí)行順序,多個(gè)jquery ready執(zhí)行順序

    下面小編就為大家?guī)?lái)一篇淺談js在html中的加載執(zhí)行順序,多個(gè)jquery ready執(zhí)行順序。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • JavaScript中Async/Await通過(guò)同步的方式實(shí)現(xiàn)異步的方法介紹

    JavaScript中Async/Await通過(guò)同步的方式實(shí)現(xiàn)異步的方法介紹

    在JavaScript的異步編程中,我們經(jīng)常使用回調(diào)函數(shù)、Promise和 Async/Await來(lái)解決異步操作的問(wèn)題,Async/Await 又是Promise的語(yǔ)法糖,它的出現(xiàn)讓異步編程變得更加直觀和易于理解,本文將詳細(xì)講解Async/Await如何通過(guò)同步的方式實(shí)現(xiàn)異步
    2023-06-06
  • Bootstrap面板使用方法

    Bootstrap面板使用方法

    面板樣式除了內(nèi)容之外,還有一個(gè)面板頭部可以添加標(biāo)題,讓我們通過(guò)這篇文章看看Bootstrap面板樣式的使用方法
    2017-01-01
  • JS閉包、作用域鏈、垃圾回收、內(nèi)存泄露相關(guān)知識(shí)小結(jié)

    JS閉包、作用域鏈、垃圾回收、內(nèi)存泄露相關(guān)知識(shí)小結(jié)

    閉包是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中變量的函數(shù)。接下來(lái)通過(guò)本文給大家介紹JS閉包作用域鏈等相關(guān)知識(shí)小結(jié)(垃圾回收內(nèi)存泄露)的相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • JavaScript使用Promise實(shí)現(xiàn)并發(fā)請(qǐng)求數(shù)限制

    JavaScript使用Promise實(shí)現(xiàn)并發(fā)請(qǐng)求數(shù)限制

    本文主要介紹了JavaScript使用Promise實(shí)現(xiàn)并發(fā)請(qǐng)求數(shù)限制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 微信小程序開(kāi)發(fā)中生命周期的詳細(xì)介紹

    微信小程序開(kāi)發(fā)中生命周期的詳細(xì)介紹

    生命周期是指一個(gè)對(duì)象從創(chuàng)建→>運(yùn)行>銷毀的整個(gè)階段,強(qiáng)調(diào)的是一個(gè)時(shí)間段,文中介紹了小程序中組件的生命周期,需要的朋友可以參考下
    2023-03-03
  • 一文帶你了解JavaScript中偽數(shù)組的使用

    一文帶你了解JavaScript中偽數(shù)組的使用

    所謂偽數(shù)組,指的是具有類似數(shù)組結(jié)構(gòu)的對(duì)象,但并非真正的數(shù)組,在本文中,我們將詳細(xì)介紹偽數(shù)組的特點(diǎn)和特征,并提供一些JavaScript代碼示例,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)起來(lái)吧
    2023-11-11

最新評(píng)論