js基礎-20-js物件賦值時的key值問題

笑道三千發表於2020-10-11

一,在定義時,物件的屬性名可以是包含空字串在內的任何字串。

二,當給物件新增屬性時,屬性名key也可以是其他資料型別

1,當key是陣列時:轉化為逗號分割的字串作為key:

	var a={}
	var arr1=[22,2,3]
	var arr2=[3,2,5]
	a[arr1]='123'
	a[arr2]='456'
	console.log(a)

在這裡插入圖片描述
於是當一個是字串,一個是陣列時,會有這種情況發生:

			var a={}
			var str1='3,2,5'
			var arr2=[3,2,5]
			a[str1]='123'
			a[arr2]='456'
			console.log(a)

在這裡插入圖片描述
第一個被覆蓋了,這裡只要知道,陣列作為key時,是轉化為逗號分割的字串就行,因為兩者值一樣,自然後者覆蓋前者。
2,當key是物件時,無論物件的內容是啥,都會轉化為‘【object Object】’作為key值,也就是說,無論是啥物件,最後一個賦值必然覆蓋之前的物件(還會覆蓋【object Object】這個字串)

		var a={}
		var str='[object Object]'
		var obj1={
			name:'zhangsan'
		}
		var obj2={
			age:14
		}
		a[str]='也是'
		a[obj1]='123'
		a[obj2]='456'
		console.log(a)

在這裡插入圖片描述
3,當是其他特殊值時:

			var a={}
			var key1=null
			var key2=undefined
			var key3=function (){console.log('a')}
			var key4=1
			var key5=NaN
			a[key1]='null'
			a[key2]='undefined'
			a[key3]='function'
			a[key4]='1'
			a[key5]='NaN'
			console.log(a)

在這裡插入圖片描述

三,總結:實際上是把它們呼叫toString()方法轉化為字串了,並且因為null和undefined沒有toString()方法,所以他倆用的是String()函式

至於為什麼所有的物件,無論內容是啥,都是同一個?這是因為Object的原型物件上的toString方法就是那個判斷資料型別的toString方法,而也就是說所有Object的例項物件的原型鏈上,都只能呼叫這個判斷型別的toString

相關文章