JavaScript是一種屬于網(wǎng)絡(luò)的高級腳本語言(計(jì)算機(jī)語言具有高級語言和低級語言之分。而高級語言又主要是相對于匯編語言而言的),廣泛被用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁添加各式各樣的動態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。
通常JavaScript腳本是通過嵌入在HTML中來實(shí)現(xiàn)自身的功能的。
JavaScript 是一種輕量級的編程語言。
JavaScript 是可插入 HTML 頁面的編程代碼。
JavaScript 插入 HTML 頁面后,可由所有的現(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)存中存儲,值與值之間是獨(dú)立存在的,修改一個(gè)變量不會影響其他的變量。
引用數(shù)據(jù)類型:對象是保存在 堆內(nèi)存 中的,每創(chuàng)建一個(gè)新的對象,就會在堆內(nèi)中開辟出一個(gè)新的空間,而變量保存的是對象的內(nèi)存地址(對象的引用),如果兩個(gè)變量保存的是同一個(gè)對象引用,當(dāng)修改其中一個(gè)變量修改屬性時(shí),另一個(gè)也會受到影響。
基本數(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ì)上是比較的對象的內(nèi)存地址,如果兩個(gè)對象的屬性是一模一樣的,但是地址不同,也會返回false;
- 內(nèi)存分配和垃圾回收。一般來說棧內(nèi)存線性有序存儲,容量小,系統(tǒng)分配效率高。而堆內(nèi)存首先要在堆內(nèi)存新分配存儲區(qū)域,之后又要把指針存儲到棧內(nèi)存中,效率相對就要低一些了。
垃圾回收方面,棧內(nèi)存變量基本上用完就回收了,而推內(nèi)存中的變量因?yàn)榇嬖诤芏嗖淮_定的引用,只有當(dāng)所有調(diào)用的變量全部銷毀之后才能回收。
關(guān)于ES6中新增Symbol類型
ES6中新增 Symbol類型(屬于基本類型),凡是屬性名屬于 Symbol 類型,就都是獨(dú)一無二的,可以保證不會與其他屬性名產(chǎn)生沖突;
let s = Symbol();
typeof s // "symbol"
Symbol 值通過Symbol函數(shù)生成。這就是說,對象的屬性名現(xiàn)在可以有兩種類型,一種是原來就有的字符串,另一種就是新增的 Symbol 類型。注意,Symbol函數(shù)前不能使用new命令,否則會報(bào)錯(cuò)。
Symbol函數(shù)可以接受一個(gè)字符串作為參數(shù),表示對 Symbol 實(shí)例的描述,主要是為了在控制臺顯示,或者轉(zhuǎn)為字符串時(shí),比較容易區(qū)分。
使用Symbol 值作為對象屬性名
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 值作為對象屬性名時(shí),不能用點(diǎn)運(yùn)算符。
因?yàn)辄c(diǎn)運(yùn)算符后面總是字符串,所以不會讀取mySymbol作為標(biāo)識名所指代的那個(gè)值,導(dǎo)致a的屬性名實(shí)際上是一個(gè)字符串,而不是一個(gè) Symbol 值。
const mySymbol = Symbol();
const a = {};
a.mySymbol = 'Hello!';
a[mySymbol] // undefined
a['mySymbol'] // "Hello!"