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