對象的兩種方法的讀取區別

對象有兩種讀法

例如:

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是會動態綁定的,而不是一開始有的,因此你只能通過這種方法.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章