基本型別和引用型別的區別可以從以下幾個方面考慮
1.是否可以新增屬性
2.變數複製
3.傳參
1.是否可以新增屬性// 建立object型別
var person = new object()
// 新增name屬性
person.name = 'james'
console.log(person.name) // 'james'
// 建立string型別
var name = 'jack'
// 新增age屬性
name.age = 20
console.log(name.age) // undefined
在上面的**中,建立了乙個物件person,給person新增了乙個name屬性,可以訪問到person.name的值,然後宣告了變數name,給name新增了age屬性,但是訪問不到name.age,說明只能給引用型別新增屬性。
2.變數複製
從乙個變數向另乙個變數複製的時候,基本型別會建立乙個新值,然後把新值複製到新變數上,引用型別則是複製了乙個指標,兩個指標指向的是同乙個物件。所以改變其中乙個變數會影響到另乙個變數。
var name1 =
'james'
var name2 = name1
name2 =
'jack'
console.
log(name1)
// 'james'
var obj1 =
var obj2 = obj1
obj2.name =
'jack'
console.
log(obj2.name)
// 'jack'
3.傳參
ecmascript中函式的引數是按值傳遞的,如果傳遞的是基本型別,則被傳遞的值會被複製給乙個區域性變數,如果傳遞的是引用型別,則複製的是記憶體位址給這個區域性變數,引數和被傳遞的值還是指向了同一物件。
function
getname
(name)
var name1 =
'james'
var name2 =
getname
(name1)
console.
log(name1)
// 'james'
console.
log(name2)
// 'jamesjack'
在上面**中,宣告了變數name1,呼叫getname方法,把name1作為引數傳遞給getname方法,列印的name1的結果沒有改變,還是原值。
function
setname
(obj)
var obj1 =
setname
(obj1)
console.
log(obj1.name)
// 'jack'
在上面**中,宣告了變數obj1,呼叫setname方法,把obj1作為引數傳遞給setname方法,列印obj1.name的值,結果obj1.name的值改變了,說明了區域性變數obj和obj1指向了同乙個物件。 js 引用型別和基本型別
js中的資料型別有以下幾種 基本型別 number boolean string undefined null symbol 引用型別 object array,function,date,正則物件,json物件 基本型別的資料是存放在棧記憶體中的,而引用型別的資料是存放在堆記憶體中的 複製變數值 ...
js 引用型別和基本型別
js中的資料型別有以下幾種 number boolean undefined object function string null 基本型別 number boolean string undefined null 引用型別 object function 基本型別的資料是存放在棧記憶體中的,而引...
js 基本型別 引用型別
1 基本的資料型別有 undefined,boolean,number,string,null.基本型別的訪問是按值訪問的,就是說你可以操作儲存在變數中的實際的值 基本型別的比較是值的比較。用 比較兩個不同型別的變數時會進行一些型別轉換。但是當兩個值的型別相同的時候,即使是 也相當於是 基本型別的變...