日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

问题分享:Js引用类型赋值

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 问题分享:Js引用类型赋值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天在微信群里有這樣一個問題和大家分享一下:

附上源碼:

function changeAgeAndReference(person){person . age = 25;person = {nage : 'John',age : 50};return person ; } var personObj1={name : 'Alex',age : 30 } var personObj2 = changeAgeAndReference(personObj1); console.log(personObj1) console.log(personObj2) 復制代碼

會輸出什么呢?答案是:

{name: "Alex", age: 25} {nage: "John", age: 50} 復制代碼

要理解答案為什么是25和50 要理解Js變量賦值問題:

1. Js有兩類數據類型:值類型(基本類型)和引用類型

? 值類型(基本類型):字符串(String)、數字(Number)、布爾(Boolean)、對空(Null)、未定義(Undefined)、Symbol
? 引用數據類型:對象(Object)、數組(Array)、函數(Function)。

基本數據類型是按值訪問的,因為可以操作保存在變量中的實際的值; 引用類型的值是保存在內存中的對象,在操作對象時,實際上是在操作對象的引用而不是實際的對象

2. 變量復制

基本類型復制:舉個栗子

var num1 = 5; var num2 = num1; 復制代碼

num1 中保存的值是 5。當使用 num1 的值來初始化 num2 時,num2 中也保存了值 5。但 num2 中的 5 與 num1 中的 5 是完全獨立的,該值只是 num1 中 5 的一個副本。此后,這兩個變量可以參與任 何操作而不會相互影響

引用類型復制:舉個栗子

var obj1 = new Object(); var obj2 = obj1; obj1.name = "Nicholas"; alert(obj2.name); 復制代碼

變量 obj1 保存了一個對象的新實例。然后,這個值被復制到了 obj2 中;換句話說,obj1 和 obj2 都指向同一個對象。這樣,當為 obj1 添加 name 屬性后,可以通過 obj2 來訪問這個屬性, 因為這兩個變量引用的都是同一個對象

現在讓我們回到問題當中

function changeAgeAndReference(person){person . age = 25;person = {nage : 'John',age : 50};return person ; } var personObj1={name : 'Alex',age : 30 } var personObj2 = changeAgeAndReference(personObj1); console.log(personObj1) console.log(personObj1) 復制代碼

var personObj2 = changeAgeAndReference(personObj1) 相當于:

var person = personObj1 復制代碼

personObj1person 都指向同一個對象,改變person的屬性age也就改變了personObj1的age; 所以 personObj1 變為 {name: "Alex", age: 25}

函數內部:

person = {nage : 'John',age : 50 }; //相當于 var person = {nage : 'John',age : 50 }; 復制代碼

person被重新賦值,已經不指向之前的的對象了,所以return 的是 {nage: "John", age: 50}


文章參考:

《JavaScript 高級程序設計》中文譯本 第三版

轉載于:https://juejin.im/post/5becd0e9e51d4543cd17310c

總結

以上是生活随笔為你收集整理的问题分享:Js引用类型赋值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。