[乐意黎转载]关于JS 命名和数组的一些记录

来源:互联网 发布:浙江丝绸行业贸易数据 编辑:程序博客网 时间:2024/06/04 18:12

对象可计算属性

  对于对象属性的访问有两种方式,一种是通过点号访问,另一种是通过键值访问方式,其两者的区别就是通过键值访问的方式,其属性名可以不遵守变量的命名规则,只要是UTF-8/Unicode编码就行,例如:

1
2
3
4
5
var object = {
'first-name': 'MrErHu'
};
console.log(object['first-name']);//MrErHu
console.log(object.first-name); //ReferenceError

  在ES5之前,涉及到对象的属性是通过字符串计算的形式得到的,必须采用构造形式去创建,而不能通过字面的形式去创建,例如:

1
2
3
var obj = new Object();
var prefix = 'first-';
obj[prefix+'name'] = 'MrErHu';

  ES6之后,增加了可计算属性,直接可以通过字面量的形式定义可计算属性。具体使用方法如下:

1
2
3
4
var prefix = 'first-';
var obj = {
[prefix+'name'] : 'MrErHu'
};

  出现这个用法最主要的作用是为了可以用过字面量的方式定义Symbol计算类型的属性。例如:

1
2
3
var obj = {
[Symbol.something] : 'Hello World'
};

值为函数的属性

  其实就是一点,一个方法是用于不会属于一个对象的,仅仅可以引用,不论是通过什么方式实现的。明确这一点就完全可以了。虽然在某些调用方式下,this会绑定到该调用对象上,但也改变不了上述的事实。



数组其实一个特殊的对象

  首先举一个例子,我发现好多工作好多年的开发者都没有正确回答这个问题:

1
2
3
4
var array = [1,2,3];
console.log(array.length);
array['3m'] = 4;
console.log(array.length);

  数组这个对象会对传入的属性名往数值类型上转,如果可以成功转换成数字类型,那么就当做正常的数字类型处理,如果不能转化成数字类型,那么就会被当做数组的一个属性,这时是不会对length
有影响的,所以上面的输出,第一个应该是3,第二个也是3

输出如下:
VM336:2 3
VM336:4 3
undefined
array
Array[3]0: 11: 22: 33m: 4length: 3__proto__: Array[0]



0 0
原创粉丝点击