优秀的编程知识分享平台

网站首页 > 技术文章 正文

javascript中对象的属性的访问的一些知识——JavaScript学习之路

nanyue 2024-08-01 22:45:17 技术文章 6 ℃

书上这样的关于javascript中对象的属性名这样说,js的对象的属性名是包括空字符串在内的所有字符串。

问题来了,我们平时定义的对象如下,是没有引号""或''的。

如下:

var copy = {
 first_name : "Jeo",
 second_name : "Mike"
};

可是能否这样写呢?

var stooge = {
 "first_name" : "Jeo",
 "second_name" : "Mike"
};

我觉得应该没问题,可是究竟有没有问题呢?

做个实验吧,再chrome控制台里写入如下代码

var stooge = {
 "first_name" : "Jeo",
 "second_name" : "Mike"
};
var copy = {
 first_name : "Jeo",
 second_name : "Mike"
};
if (stooge.first_name === copy.first_name)
{
 console.log('I am right');
} else {
 console.log('Wrong!');
}

输出:I am right

也就是说,书上说的没错,是字符串,而且属性名是合法的(不是javascript的保留字)是允许不用引号括起来属性名的。

可是对象的属性又是如何调用(访问)呢?

按照上面的定义方法,我们是使用第一种stooge.first_name,还是 stooge."first_name" 呢?

实验结果表明:

应该是stooge.first_name

应该这么写,也就是说,这种写法也是默认支持不用引号括起来属性名

当然javascript对象属性的访问和数组的访问写法很像,可是按照上面的写法究竟是stooge[first_name],还是 stooge["first_name"] 呢?

答案是stooge["first_name"]

此种写法类似数组,一定要在[]中加入对应有引号的字符串,才能识别出键。

昨天完成了这篇文章之后,遇到了这样的一种情况:

var sample = {
1 : "abc",
5 : 100
};
sample[1]

这个是正常的,没有报错,不太符合上面的结论。。。于是我求助了大神,给了这样一个回复。js 对象的属性使用偏移实现, 与索引的类型没有直接关系, 在运行时均会转换为基准地址与偏移量, 从语法上来说 关联数组中的 数字也会转换为字符串来解释。

我理解,大概的意思就是这里[]里的1是被隐式转换成了字符串。假设是把其中的1换成字符串a,就要报错了。如下图:

至于详细原因,暂时还理解的不是很透彻,之后再复习吧。。。

最近发表
标签列表