对象的两种方法的读取区别

对象有两种读法

例如:

var myCar = new Object();
// 通过点来获取
myCar.make = 'Ford';
myCar.model = 'Mustang';
myCar.year = 1969;
//通过[]来获取
myCar['make'] = 'Ford';
myCar['model'] = 'Mustang';
myCar['year'] = 1969;

这里通过一道题来看一下这两种方法的区别.

count(‘javaScript’) 会返回一个统计结果对象,该对象表示 javaScript 的字符统计结果。
count(‘javaScript’); // 返回结果为 {j: 1, a: 2, v: 1, S: 1, c: 1, r: 1, i: 1, p: 1, t: 1}

第一种做法: 没有任何问题

function count(str){
				var obj={};
				let i;
				let len=str.length;
				for(i=0;i<len;i++){
					if(obj[str[i]]){
						obj[str[i]]++;
					}else{
						obj[str[i]]=1;
					}
				}
				return obj;
			}
			var res=count("javaScript");
			console.log(res);    //Object {j: 1, a: 2, v: 1, S: 1, c: 1…}

第二种做法:

function count(str){
				var obj={};
				let i;
				let len=str.length;
				for(i=0;i<len;i++){
					
					if(obj.str[i]){
						obj[str[i]]++;
					}else{
						obj.str[i]=1;
					}
				}
				return obj;
			}
			var res=count("javaScript");
			console.log(res);   

下面的方法报了以下的错误:
Uncaught TypeError: Cannot read property ‘0’ of undefined
at count (字符串自负统计.html:15)
at 字符串自负统计.html:23

现在我们再来去看文档去查这两种方法的区别:
An object property name can be any valid JavaScript string, or anything that can be converted to a string, including the empty string. However, any property name that is not a valid JavaScript identifier (for example, a property name that has a space or a hyphen, or that starts with a number) can only be accessed using the square bracket notation. This notation is also very useful when property names are to be dynamically determined (when the property name is not determined until runtime).

也就是说[],这种方法会比另一种方法更加使用范围广,有点如下:
1.可以读取key里有空格,数字为开头的key等。
2.当对象的key是会动态绑定的时候只能用这种方法。
这道题目就是对象的key是会动态绑定的,而不是一开始有的,因此你只能通过这种方法.

发布了83 篇原创文章 · 获赞 18 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Abudula__/article/details/98292261
今日推荐