JavaScript是一種屬于網(wǎng)絡(luò)的高級(jí)腳本語(yǔ)言(計(jì)算機(jī)語(yǔ)言具有高級(jí)語(yǔ)言和低級(jí)語(yǔ)言之分。而高級(jí)語(yǔ)言又主要是相對(duì)于匯編語(yǔ)言而言的),廣泛被用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁(yè)添加各式各樣的動(dòng)態(tài)功能,為用戶提供更流暢美觀的瀏覽效果熬甫。
通常JavaScript腳本是通過嵌入在HTML中來實(shí)現(xiàn)自身的功能的。
JavaScript 是一種輕量級(jí)的編程語(yǔ)言必盖。
JavaScript 是可插入 HTML 頁(yè)面的編程代碼澎蛛。
JavaScript 插入 HTML 頁(yè)面后,可由所有的現(xiàn)代瀏覽器執(zhí)行羹与。
JavaScript 很容易學(xué)習(xí)德谅。
js中數(shù)據(jù)類型有哪些爹橱?
包括ES6新增的Symbol屬性,js共有 7 種數(shù)據(jù)類型(BigInt暫不考慮)窄做;
基本數(shù)據(jù)類型:undefined愧驱、null、String椭盏、Number组砚、Boolear、Symbol(ES6新增)
引用數(shù)據(jù)類型:Object
基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
基本數(shù)據(jù)類型: 基本數(shù)據(jù)類型的變量是保存在 棧內(nèi)存 中的掏颊,基本數(shù)據(jù)類型的值直接在棧內(nèi)存中存儲(chǔ)糟红,值與值之間是獨(dú)立存在的,修改一個(gè)變量不會(huì)影響其他的變量乌叶。
引用數(shù)據(jù)類型:對(duì)象是保存在 堆內(nèi)存 中的盆偿,每創(chuàng)建一個(gè)新的對(duì)象,就會(huì)在堆內(nèi)中開辟出一個(gè)新的空間准浴,而變量保存的是對(duì)象的內(nèi)存地址(對(duì)象的引用)事扭,如果兩個(gè)變量保存的是同一個(gè)對(duì)象引用,當(dāng)修改其中一個(gè)變量修改屬性時(shí)兄裂,另一個(gè)也會(huì)受到影響。
基本數(shù)據(jù)類型與引用數(shù)據(jù)類型的區(qū)別:
- 保存的內(nèi)存不同阳藻∥保基本數(shù)據(jù)類型保存在棧內(nèi)存中,引用類型保存在堆內(nèi)存中腥泥;
- 比較的方式不同匾南。當(dāng)比較兩個(gè)基本數(shù)據(jù)類型的值時(shí),本質(zhì)上是比較值蛔外;當(dāng)比較兩個(gè)引用數(shù)據(jù)類型時(shí)蛆楞,本質(zhì)上是比較的對(duì)象的內(nèi)存地址溯乒,如果兩個(gè)對(duì)象的屬性是一模一樣的,但是地址不同豹爹,也會(huì)返回false裆悄;
- 內(nèi)存分配和垃圾回收。一般來說棧內(nèi)存線性有序存儲(chǔ)臂聋,容量小光稼,系統(tǒng)分配效率高。而堆內(nèi)存首先要在堆內(nèi)存新分配存儲(chǔ)區(qū)域孩等,之后又要把指針存儲(chǔ)到棧內(nèi)存中艾君,效率相對(duì)就要低一些了。
垃圾回收方面肄方,棧內(nèi)存變量基本上用完就回收了冰垄,而推內(nèi)存中的變量因?yàn)榇嬖诤芏嗖淮_定的引用,只有當(dāng)所有調(diào)用的變量全部銷毀之后才能回收权她。
關(guān)于ES6中新增Symbol類型
ES6中新增 Symbol類型(屬于基本類型)虹茶,凡是屬性名屬于 Symbol 類型,就都是獨(dú)一無二的伴奥,可以保證不會(huì)與其他屬性名產(chǎn)生沖突写烤;
let s = Symbol();
typeof s // "symbol"
Symbol 值通過Symbol函數(shù)生成。這就是說拾徙,對(duì)象的屬性名現(xiàn)在可以有兩種類型洲炊,一種是原來就有的字符串,另一種就是新增的 Symbol 類型尼啡。注意暂衡,Symbol函數(shù)前不能使用new命令,否則會(huì)報(bào)錯(cuò)崖瞭。
Symbol函數(shù)可以接受一個(gè)字符串作為參數(shù)狂巢,表示對(duì) Symbol 實(shí)例的描述,主要是為了在控制臺(tái)顯示书聚,或者轉(zhuǎn)為字符串時(shí)唧领,比較容易區(qū)分。
使用Symbol 值作為對(duì)象屬性名
let mySymbol = Symbol();
// 第一種寫法
let a = {};
a[mySymbol] = 'Hello!';
// 第二種寫法
let a = {
[mySymbol]: 'Hello!'
};
// 第三種寫法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上寫法都得到同樣結(jié)果
a[mySymbol] // "Hello!"
注意雌续,Symbol 值作為對(duì)象屬性名時(shí)斩个,不能用點(diǎn)運(yùn)算符。
因?yàn)辄c(diǎn)運(yùn)算符后面總是字符串驯杜,所以不會(huì)讀取mySymbol作為標(biāo)識(shí)名所指代的那個(gè)值受啥,導(dǎo)致a的屬性名實(shí)際上是一個(gè)字符串,而不是一個(gè) Symbol 值。
const mySymbol = Symbol();
const a = {};
a.mySymbol = 'Hello!';
a[mySymbol] // undefined
a['mySymbol'] // "Hello!"