js基础-20-js对象赋值时的key值问题

一,在定义时,对象的属性名可以是包含空字符串在内的任何字符串。

二,当给对象添加属性时,属性名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

猜你喜欢

转载自blog.csdn.net/weixin_42349568/article/details/109017382