JS引用型別
重新總結一遍,最近推薦vue給後端的小夥伴使用,涉及到引用物件的值一變全變的問題,比如說一個列表繫結的data陣列,編輯某一條的表單資料的時候,直接取列表物件的話,在表單中值改變的同時,列表中的資料也跟著變了,這顯然不是我們想要的。
這個問題的原因就在於JS中的引用型別物件,於是有以下程式碼親測結果:
基本型別(Number,String)
Array
Object
可見,基本型別可以認為是傳值賦值,而(狹義上的)物件型別則是引用賦值,會攜帶記憶體地址,相當於指標,其中一個拷貝變化,全部拷貝都會跟著變化。而對於MVVM框架來說,它的例項對應的資料都是存放在一個叫做data的物件中,相關的變數實際上只是data的屬性而已,也就是說data本身就是引用型別的物件字面量,也就是屬於上面所說的Object的情況。
解決方法:
var b = JSON.parse(JSON.stringify(a));
轉換為JSON字串之後可以解除引用
相關推薦
問題分享:Js引用型別賦值
今天在微信群裡有這樣一個問題和大家分享一下: 附上原始碼: function changeAgeAndReference(person){ person . age = 25; person = { nage : 'John', age : 50 }
JS 引用型別賦值問題
function changePerson(person3) { person3.sex = "female"; } var person1 = {}; person1.color = "black"; person1.sex = "male"; var person2 = person1
JS引用型別中的基本包裝型別——String
String型別是字串的物件包裝型別,可以像下面這樣使用String建構函式來建立。 var stringObject = new String("hello world"); 一,字元方法 1、用於訪問字串中特定字元的兩個方法:charAt()和charCod
JS引用型別中的基本包裝型別-——Boolean,Number,String
為了便於操作基本型別的值,ECMAScript提供了三個特殊的引用型別:Boolean,Number,String 一,基本包裝型別與引用型別的主要區別 每當讀取一個基本型別的值時,後臺就會建立一個對應的基本包裝型別的物件,從而能夠讓我們呼叫一些方法來操作這些資料。 在
JS引用型別中的Function型別——函式屬性和方法【this,arguments物件;apply(),call方法】
一,瞭解函式 1,函式實際是物件,每個函式都是Function型別的例項,而且都與其他引用型別一樣具有屬性和方法,由於函式是物件,因此函式名實際上也是一個指向函式物件的指標,不會與某個函式繫結。 2,函式沒有過載,當聲明瞭兩個同名函式時結果會是後面的函式覆蓋前面的函式。
JS引用型別中的RegExp型別——輕鬆記住正則表示式
該博文對於已經理解了正則表示式的比較管用 (一) 在JavaScript中,可以使用RegExp()內建函式建立正則表示式物件。正則表示式直接量也被定義為包含在一對斜槓(/)之間的字元 如: var expression = / pattern / flags; 其中模式(patte
JS引用型別中的Date型別
一, 瞭解Date的使用 Date型別使用使用UTC(Coordinated Universal Time,國際協調時間)1970年1月1日午夜(零時)開始經過的毫秒數來儲存日期。 要建立一個日期物件,使用new操作符和Date建構函式即可如下: v
工作日常--js引用型別資料深拷貝與淺拷貝
js資料型別 簡單資料型別 簡單的資料型別包括Undifine,NULL,Bolean,String,Number。這些資料型別的資料的儲存是在堆中儲存的。堆中存放的資料是先進先出。FIFO(first in first out) 引用型別 引用型別包括
JS引用型別
重新總結一遍,最近推薦vue給後端的小夥伴使用,涉及到引用物件的值一變全變的問題,比如說一個列表繫結的data陣列,編輯某一條的表單資料的時候,直接取列表物件的話,在表單中值改變的同時,列表中的資料也跟著變了,這顯然不是我們想要的。 這個問題的原因就在於JS中的引用型別物件
js引用型別指標及js連續賦值
從一個簡單例子來理解js引用型別指標的工作方式 1234567<script>var a = {n:1}; var b = a; a.x = a = {n:
js--引用型別Array--2.數組合並幾種方法
根據第一部分的基礎知識,我們最容易想到的是concat、push、unshift 1.concat合併陣列 concat是生成一個新陣列,記憶體則是a和b的和 var a = [1,2,3], b = ["ab","cd","ef"],
js--引用型別Array--1.Array的基礎知識
1.檢測陣列 value instanceof Array 但若在兩個以上不同的全域性執行環境下,會存在兩個以上版本的Array建構函式,當一個框架向另外一個框架傳入陣列時,傳入的陣列和第二個框架中原生建立的陣列分別具有不同的建構函式,從而會出錯。
js 資料引用型別(二)——陣列Array
除了 Object之外,Array型別也是js中最常用的型別了。 建立陣列有2種基本方式,一是Array建構函式,如 var colors=new Array(3); 二是使用陣列字面量表示法,如 var colors=["red","blue","green"];那如何檢測
js中的棧與堆的講解/基本資料型別與引用型別的講解
1、棧(stack)和堆(heap) stack為自動分配的記憶體空間,它由系統自動釋放;而heap則是動態分配的記憶體,大小不定也不會自動釋放。 2、基本型別和引用型別 基本型別:存放在棧記憶體中的簡單資料段,資料大小確定,記憶體空間大小可以分配。 5種基
js中值型別和引用型別的區別(無舉例)
js中的變數型別有哪些? (1)值型別:字串string、數值number、布林值boolean、undefined (2)引用型別:物件object、陣列array、函式function 值型別和引用型別的區別 (1)值型別: 1⃣️佔用空間固定,儲存在棧中(當一個方法
JS中基本型別和引用型別分別指的的是什麼?有何區別?
這裡是修真院前端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】 八個方面深度解析前端知識/技能,本篇分享的是: 【JS中基本型別和引用型別分別指的的是什麼?有何區別? 】 1.背
js學習筆記-引用型別-object
//建立引用型別的兩種方式 //1.new object()與var obj={}等同 /*var obj = new Object(); //或 //var obj={}; obj.name = "wlz"; obj.age = 17; obj.eat =
JS中基本資料型別和引用型別最根本的區別
前言 JS中的型別只有6種,其中基本資料型別有5種分別為string,number,boolen,null,undefined,引用型別有一種,就是object,object是一個大的綜合體,在JS中除了那5個基本資料型別以外,其他的一切皆物件。 正文 兩個對比的例
Js值型別和引用型別
由JavaScript 中的變數型別傳遞方式,分為值型別和引用型別,值型別變數包括 Boolean、String、Number、Undefined、Null,引用型別包括了 Object 類的所有,如 Date、Array、Function 等。在引數傳遞方式上,值型別是按
js的基礎(平民理解的執行上下文/呼叫堆疊/記憶體棧/值型別/引用型別)
與以前的切圖比較,現在的前端開發對js的要求似乎越來越高,在開發中,我們不僅僅是要知道如何運用現有的框架(react/vue/ng), 而且我們對一些基礎的知識的依賴越來越大。 現在我們就用平民的方法講解下執行上下文/呼叫堆疊/記憶體棧。 理解下 javascript 在執行中,ja