国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解JavaScript 為什么要有 Symbol 類型?

2024-05-06 15:41:08
字體:
來源:轉載
供稿:網友

Symbols 是 ES6 引入了一個新的數據類型 ,它為 JS 帶來了一些好處,尤其是對象屬性時。 但是,它們能為我們做些字符串不能做的事情呢?

在深入探討 Symbol 之前,讓我們先看看一些 JavaScript 特性,許多開發人員可能不知道這些特性。

背景

js 中的數據類型總體來說分為兩種,他們分別是:值類型 和 引用類型

值類型(基本類型):數值型(Number),字符類型(String),布爾值型(Boolean),null 和 underfined

引用類型(類):函數,對象,數組等

值類型理解:變量之間的互相賦值,是指開辟一塊新的內存空間,將變量值賦給新變量保存到新開辟的內存里面;之后兩個變量的值變動互不影響,例如:

var a = 10; //開辟一塊內存空間保存變量a的值“10”;var b = a; //給變量 b 開辟一塊新的內存空間,將 a 的值 “10” 賦值一份保存到新的內存里;//a 和 b 的值以后無論如何變化,都不會影響到對方的值;

一些語言,比如 C,有引用傳遞和值傳遞的概念。JavaScript 也有類似的概念,它是根據傳遞的數據類型推斷的。如果將值傳遞給函數,則重新分配該值不會修改調用位置中的值。但是,如果你修改的是引用類型,那么修改后的值也將在調用它的地方被修改。

引用類型理解:變量之間的互相賦值,只是指針的交換,而并非將對象(普通對象,函數對象,數組對象)復制一份給新的變量,對象依然還是只有一個,只是多了一個指引~~;例如:

var a = { x: 1, y: 2 }; //需要開辟內存空間保存對象,變量 a 的值是一個地址,這個地址指向保存對象的空間;var b = a; // 將a 的指引地址賦值給 b,而并非復制一給對象且新開一塊內存空間來保存;// 這個時候通過 a 來修改對象的屬性,則通過 b 來查看屬性時對象屬性已經發生改變;

值類型(神秘的 NaN 值除外)將始終與具有相同值的另一個值類型的完全相等,如下:

const first = "abc" + "def";const second = "ab" + "cd" + "ef";console.log(first === second); // true

但是完全相同結構的引用類型是不相等的:

const obj1 = { name: "Intrinsic" };const obj2 = { name: "Intrinsic" };console.log(obj1 === obj2); // false// 但是,它們的 .name 屬性是基本類型:console.log(obj1.name === obj2.name); // true

對象在 JavaScript 語言中扮演重要角色,它們的使用無處不在。對象通常用作鍵/值對的集合,然而,以這種方式使用它們有一個很大的限制: 在 symbol 出現之前,對象鍵只能是字符串,如果試圖使用非字符串值作為對象的鍵,那么該值將被強制轉換為字符串,如下:

const obj = {};obj.foo = 'foo';obj['bar'] = 'bar';obj[2] = 2;obj[{}] = 'someobj';console.log(obj);// { '2': 2, foo: 'foo', bar: 'bar',   '[object Object]': 'someobj' }            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 苏州市| 谷城县| 绥中县| 阿尔山市| 鄂尔多斯市| 通河县| 黑山县| 阜城县| 庐江县| 安塞县| 博客| 新营市| 安福县| 砀山县| 合阳县| 白城市| 开封市| 广昌县| 望江县| 延吉市| 徐州市| 赤城县| 怀远县| 伊春市| 潮州市| 商丘市| 保靖县| 新干县| 栾川县| 柳林县| 德惠市| 新宾| 浮山县| 铜川市| 华蓥市| 策勒县| 通道| 景谷| 余江县| 五指山市| 彰化县|