論javascript中的原始值和對象

来源:http://www.cnblogs.com/painsOnline/archive/2016/01/06/5105277.html
-Advertisement-
Play Games

不造你有沒有這樣把js數據類型分類,不造你是否知道各種數據類型是怎樣賦值怎樣傳遞的,所有的不造,看了這篇就能懂了,保證小學生即可懂!


javascript將數據類型分為兩類:原始值(undefined、null、布爾值、數字和字元串),對象(對象、函數和數組)

論點:原始值不可以改變,對象可以改變;對象為引用類型;

 

'原始值不可以改變'不可以改變,如果動腦筋的同學肯定會懷疑了,你們字元串可以改變啊,不信你瞅下麵的

var a = 'aa';
alert(a.toUpperCase());//彈出 AA

其實,這些只是錶面現象,原始值字元串'a'其實並未發生改變,只是拷貝了一份然後對新的拷貝使用'toUpperCase'函數而已,有下麵代碼為證

var a = 'aa';
a.toUpperCase();
alert(a);//彈出'aa'

瞅著了吧,其實字元串'a'並沒有發生變化

原始值的比較是值得比較,他們值相等時才相等。

 

對象和原始值不同,他們的值可以修改,如下

var obj = {'a' : 1, 'b' : 2};
obj.a = 3;
obj.b = 4;

var arr = [1, 2, 3];
arr[0] = 4;

對象的比較併發值得比較,即使兩個對象包含同樣的屬性和值,它們也是不相同的


奉上以下代碼為證:

var a = {'x' : 1}, b = {'x' : 1};
alert(a === b);//false

var c = [1], d = [1];
alert(c === d);//false

對象的值都是引用,對象的比較均是引用的比較,當且僅當它們引用同一個基對象時,它們才相等

'對象的值都是引用' 奉上如下代碼以為證

var a = {'x' : 1};
var b = a;
a.x = 2;
alert(b.x);// 彈出2

var c = function(){
   this.x = 1;  
}
var d = new c;
var e = d;
d.x = 3;
alert(e.x);//彈出3

var aa = [1, 2, 3];
var bb = aa;
aa[0] = 11;
alert(bb[0]);//彈出 11

 

'對象的比較均是引用的比較,當且僅當它們引用同一個基對象時,它們才相等' 奉上如下代碼為證

var a = [1, 2, 3];
var b = a;
a[1] = 5;
alert(a === b);//彈出true

var  aa = [1, 2, 3];
var bb = [1, 2, 3];
alert(aa === bb);//彈出false

 

如我們上面的論述,對象的賦值只是賦值的引用,並沒有進行任何拷貝,如果你想要得到一個拷貝的副本,則必須顯式的為對象的每個屬性或數組的每個元素進行拷貝,如下

var a = [1, 2, 3, 4, 5];
var b = [];
for(var i =0, _len = a.length; i < _len; i++){
  b[i] = a[i];
}

同樣的如果我們想要對比兩個數組或者對象,必須將數組或對象的每個元素或屬性進行比較

 

鄙人才疏學淺,有不足之處,歡迎補足!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、部分快捷鍵。這個在網上有一大堆,不過筆者認為,還是應該看個人習慣和使用環境吧。如果用得順手,那就是快捷鍵,如果用得不順手,那應該稱其為“輔助鍵”吧。下麵介紹幾個常用的快捷鍵:1.截圖。屏幕部分畫面:command+ Shift + 4保存格式為(.png),路徑是在桌面上面,所以截圖完就在桌面上...
  • 在控制器裡面想調用一個視圖的子視圖的代理方法很簡單1.找到子視圖的協議和代理屬性2.給你想調用的控制項添加代理屬性,遵守的協議和子視圖的一樣3.重寫代理屬性的set方法
  • 拿到設計圖使用markdown標好尺寸、字體大小和顏色等,但是是什麼字體我還不知道如何判斷,估計還得問設計師吧!這是一張手機端的html5網頁,一般考慮適應webkit內核,還有就是需要設置meta標記防止縮放、自適應等,代碼如下:寬度為設備寬度,初始化縮放比為1,最小縮放比為1,不能縮放。由於看到...
  • [1]引用 [2]特性 [3]屬性 [4]方法
  • Senna.js 是一個速度超快的單頁應用程式引擎,提供了幾個低級別的API,可以幫助你打造現代化的基於 Web 的應用程式。更重要的是,搜索引擎蜘蛛應該能夠索引相同的內容。通過使用 HTML5 History API,我們可以操縱使用 pushState,replaceState 和 popSta...
  • 純靜態頁面,不依賴伺服器端腳本,從一個靜態頁面傳遞給另一個靜態頁面,大致有這三種實現方案:1.通過url ?後面的參數傳 www.xxx.com/xxx.html?key=value&&key2=value2通過js,locaton.search獲取2.通過cookiejs設置cookie,另一個頁...
  • 樣式表有三種方式:內嵌樣式(inline Style) :是寫在Tag裡面的,內嵌樣式只對所有的Tag有效。 (也稱作“內聯樣式”)內部樣式(internal Style Sheet):是寫在HTML的裡面的,內部樣式只對所在的網頁有效。外部樣式表(External Style Sheet):如果很...
  • [1]屬性 [2]方法 [3]tips
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...