JS 对象属性访问的 2 种方式和用途
代码如下:
- <script>
- var str = "zhaochucichuzuiduodezifu";
- var o = {};
- for (var i = 0,
- length = str.length; i < length; i++) { // var char = str[i]; var char = str.charAt(i); if (o[char]) { //char就是对象o的一个属性,o[char]是属性值,o[char]控制出现的次数 o[char]++; //次数加1 } else { o[char] = 1; //若第一次出现,次数记为1 } } console.log(o); //输出的是完整的对象,记录着每一个字符及其出现的次数 //遍历对象,找到出现次数最多的字符和次数 var max = 0; var maxChar = null; for (var key in o) { if (max < o[key]) { max = o[key]; //max始终储存次数最大的那个 maxChar = key; //那么对应的字符就是当前的key } } console.log("最多的字符是" + maxChar); console.log("出现的次数是" + max);
- </script>
后来在一个中查到,原来对象访问属性有两种方式。有一个对象 Obj = {"Name":"Langshen","AGE":"28"}
用点访问, Obj.Name ; 用中括号访问, Obj["Name"]; 上述两种方式得到的结果都是属性 Name 的值 Langshen;
上面 2 中访问的方式可以获得同样的效果,是因为对象的属性是已经存在的,这里在延伸一下上述两种方式为对象新建属性时用法的区别。
首先,回到文章的开头。代码 o[char] 表示的是 o 对象的一个属性值。那能不能用 o.char 表示呢?答案是否定的。
原因是:
- 用 o[char] 时,char(var char = str.charAt(i))这个变量是变化的。
- 当 i = 0; ,o[char] 和 o.z 是等效的。表示为 o 对象创建了 z 属性。
- 当 i = 1; ,o[char] 和 o.h 是等效的。表示为 o 对象创建了 h 属性。
- 所以最后得到的对象为: o{z: 3, h: 3, a: 1, o: 2, c: 3},str 中有多少种不同的字母,就给 o 对象创建了多少个属性。当然属性第 1 次创建是是空值,得到的布尔值是 false。,后面赋值为 1 后,则布尔值转变为 true, 即完成了计数功能。
- 若将 o[char] 替换为 o.char, 最后得到的 o{char:24} 只有一个 char 属性,它的值就是 str 字符串的长度,无法实现我们的要求。
总结:
在引用已有的对象属性时,并有属性名的情况下,用点和中括号是一样的;若属性是数组或者是对象,没有属性名,则要用类似数组元素引用的方式,用中括号 + 下标。; 在创建函数属性的时候,若属性名是已知的。用点和中括的的方式一样。
若属性名是一组变量,则只能用中括号表示。中括号的灵活应用可以让代码变的很强大。就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/03-31/19742621.html