摘要:原始類型和引用類型原始類型存儲(chǔ)簡(jiǎn)單數(shù)據(jù)值,引用類型存儲(chǔ)對(duì)象,其本質(zhì)是指向內(nèi)存位置的應(yīng)用。保存指向內(nèi)存中實(shí)際對(duì)象所在位置的指針鑒別引用類型操作符以一個(gè)對(duì)象和一個(gè)構(gòu)造函數(shù)為參數(shù)。這些特殊引用類型的存在使得原始引用類型用起來和對(duì)象一樣方便。
原始類型和引用類型
1.原始類型存儲(chǔ)簡(jiǎn)單數(shù)據(jù)值,引用類型存儲(chǔ)對(duì)象,其本質(zhì)是指向內(nèi)存位置的應(yīng)用。
注:其他編程語(yǔ)言用棧存儲(chǔ)原始類型,用堆存儲(chǔ)引用類型。JavaScript原始值被保存在變量對(duì)象內(nèi),而引用值則作為一個(gè)指針保存在變量對(duì)象內(nèi),該指針指向?qū)嶋H對(duì)象在內(nèi)存中的存儲(chǔ)位置。
2.原始類型:boolean,number,string,null,undefined。原始類型的變量直接保存原始值(而不是一個(gè)指向?qū)ο蟮闹羔槪簿褪钦f,當(dāng)你將原始值賦值給一個(gè)變量時(shí),該值被復(fù)制到變量中,每一個(gè)變量都有它自己的一份數(shù)據(jù)拷貝。
var name = "張三"; var age = 18; var show = true; var object = null; var flag = undefined; // 一個(gè)變量的改變并不會(huì)影響到其他變量 var color1 = "red"; var color2 = color1; console.log(color1); // red console.log(color2); // red color2 = "blue"; console.log(color1); // red console.log(color2); // blue
3.引用類型:引用類型不在變量中保存對(duì)象,所以例子中的object變量實(shí)際上并不包含對(duì)象的實(shí)例,而是一個(gè)指向內(nèi)存中實(shí)際對(duì)象所在位置的指針(或者說是引用)。這就意味著,當(dāng)你將一個(gè)對(duì)象賦值給變量時(shí),實(shí)際上賦值給這個(gè)變量的是一個(gè)指針。也就是說,這兩個(gè)變量指向內(nèi)存中的同一個(gè)對(duì)象。
var object = new Object(); //保存指向內(nèi)存中實(shí)際對(duì)象所在位置的指針
4.鑒別引用類型
instanceof操作符以一個(gè)對(duì)象和一個(gè)構(gòu)造函數(shù)為參數(shù)。如果對(duì)象是構(gòu)造函數(shù)所指定的類型的一個(gè)實(shí)例,instanceof返回true;否則返回false。intanceof操作符可鑒別繼承類型,意味著所有的引用類型都繼承Object。
var items = []; var object = {}; function reflect(value){ return value; } console.log(items instanceof Array); // true console.log(object instanceof Object); // true console.log(reflect instanceof Function); // true
5.鑒別數(shù)組
當(dāng)JavaScript的值在同一個(gè)頁(yè)面不同框架之間傳來傳去,再用instanceof來鑒別引用類型的時(shí)候,就可能出現(xiàn)問題,因?yàn)槊恳粋€(gè)框架都有它自己的全局上下文--Object、Array以及其他內(nèi)建類型的版本。所以,當(dāng)你把數(shù)組從一個(gè)框架傳到另一個(gè)框架時(shí),instanceof就無法識(shí)別,因?yàn)樵摂?shù)組是來自不同框架的Array的實(shí)例。所以這個(gè)時(shí)候,得用Array.isArray()方法來鑒別數(shù)組,該方法只兼容IE9及以上。
6.原始封裝類型
原始封裝類型共有3種,(String,Number和Boolean)。這些特殊引用類型的存在使得原始引用類型用起來和對(duì)象一樣方便。例如:
var name = "張三"; var firstChar = name.charAt(0); console.log(firstChar); // 張 // 背后發(fā)生的事情 var name = "張三"; var temp = new String(name); var firstChar = temp.charAt(0); temp = null; console.log(firstChar); // 張 var name = "張三"; name.last = "王五"; console.log(name.last); // undefined // 背后發(fā)生的事情 var name = "張三"; var temp = new String(name); temp.last = "王五"; temp = null; var temp = new String(name); console.log(temp.last); // undefined temp = null;
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/83589.html
摘要:原文鏈接一個(gè)變量可以存放兩種類型的值,基本類型的值和引用類型的值。引入了一種新的原始數(shù)據(jù)類型,表示獨(dú)一無二的值。 原文鏈接 一個(gè)變量可以存放兩種類型的值,基本類型的值(primitive values)和引用類型的值(reference values)。 ES6 引入了一種新的原始數(shù)據(jù)類型 Symbol,表示獨(dú)一無二的值。它是 JavaScript 語(yǔ)言的第七種數(shù)據(jù)類型,前六種是:Un...
摘要:結(jié)合實(shí)際中的情況來看,有意或無意中涉及到隱式類型轉(zhuǎn)換的情況還是很多的。此外當(dāng)進(jìn)行某些操作時(shí),變量可以進(jìn)行類型轉(zhuǎn)換,我們主動(dòng)進(jìn)行的就是顯式類型轉(zhuǎn)換,另一種就是隱式類型轉(zhuǎn)換了。 前言 相信剛開始了解js的時(shí)候,都會(huì)遇到 2 ==2,但 1+2 == 1+2為false的情況。這時(shí)候應(yīng)該會(huì)是一臉懵逼的狀態(tài),不得不感慨js弱類型的靈活讓人發(fā)指,隱式類型轉(zhuǎn)換就是這么猝不及防。結(jié)合實(shí)際中的情況來看...
摘要:它對(duì)數(shù)組和對(duì)象使用按值傳遞,但這是在的共享傳參或拷貝的引用中使用的按值傳參。例如在這里,變量和值在執(zhí)行期間存儲(chǔ)在堆棧中。返回值這是可選的,函數(shù)可以返回值,也可以不返回值。變量被推入堆棧,從而在執(zhí)行時(shí)成為的副本。 這是專門探索 JavaScript 及其所構(gòu)建的組件的系列文章的第 22 篇。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 如果你錯(cuò)過了前面的章節(jié),可...
摘要:它對(duì)數(shù)組和對(duì)象使用按值傳遞,但這是在的共享傳參或拷貝的引用中使用的按值傳參。例如在這里,變量和值在執(zhí)行期間存儲(chǔ)在堆棧中。返回值這是可選的,函數(shù)可以返回值,也可以不返回值。變量被推入堆棧,從而在執(zhí)行時(shí)成為的副本。 這是專門探索 JavaScript 及其所構(gòu)建的組件的系列文章的第 22 篇。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 如果你錯(cuò)過了前面的章節(jié),可...
摘要:返回布爾值,表示參數(shù)字符串是否在原字符串的頭部。布爾值中布爾值有兩個(gè)和和都表示值的空缺,但事從背后更深遠(yuǎn)的角度考慮,他們的還是有差別的。首先我們來看一下類型轉(zhuǎn)化表任意的值都可以轉(zhuǎn)換為布爾值,只有會(huì)被轉(zhuǎn)換為,其他所有值都會(huì)被轉(zhuǎn)換成。 開辟了一個(gè)關(guān)于javascript的基礎(chǔ)系列,更加深入、細(xì)致的了解這門語(yǔ)言。今天分享的是js的數(shù)據(jù)類型。 javascript的數(shù)據(jù)類型可以分為兩類:原始類...
閱讀 3050·2021-09-03 10:33
閱讀 1276·2019-08-30 15:53
閱讀 2626·2019-08-30 15:45
閱讀 3387·2019-08-30 14:11
閱讀 537·2019-08-30 13:55
閱讀 2587·2019-08-29 15:24
閱讀 1915·2019-08-26 18:26
閱讀 3571·2019-08-26 13:41