js 问题,自定义对象

如图所示,'2':'a','3':'b','length':8,'push':Array.prototype.push这里2,3,length,push都是obj的属性,... 如图所示,'2':'a','3':'b','length':8,'push':Array.prototype.push这里2,3,length,push都是obj的属性,而且都是字符,为什么length属性可以使用obj.length访问而2,3,却不行?然后麻烦详细说下属性名带引号和不带引号的区别?? 展开
 我来答
网海1书生
科技发烧友

2018-08-03 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部
不管加没加引号,对象的属性名都是字符串。
但是在调用属性时,如果属性名本身是数值,则不能以 obj.2 这样的形式进行调用,只能用 obj["2"] 这种形式调用。为什么呢,请看下面的例子:
首先,假定 obj.2 这样的调用方式是合法的,那么下面的语句也没问题:
alert(obj.2);
但是,如果改成下面这样的方式呢?
with(obj){
alert(2);
}

这时候你究竟让系统把2作为obj的属性呢,还是纯粹的数字2?
所以,为了防止混淆,js中规定所有的名称(比如变量名、对象名、函数名、属性名等等)都要以字母(或者下划线)开头,不能以数字或其他符号开头(当然纯数字就更不可以了)。其实几乎所有的编程语言都有这样的规定的。
至于自定义对象中的数字形式的键,其实并不算是属性名,我们可以把它理解为类似于数组(数组也是对象)中的序号或者索引号。
再补充说一句:尽可能避免用数字来作为对象的键名!
追问
用数字做建名是建立一个类数组不是么?
追答

如果所有键名都是数字,那就直接建立一个数组了。但是这种数字和字母混杂的情况,很容易引起混淆,而且会造成阅读困难,本来属性名的作用就是帮助代码使用者理解后面值的作用(比如length、push都具有这种作用),但数字(2、3)却无法直观表达意思。我所说的避免的就是指后面这种情况。

其实也可以在对象中包含数组啊,这样层次更加分明。比如:

var obj = {
    'data': [
        'a',
        'b'
    ],
    'length': 8,
    'push': Array.prototype.push
}
方范贺高
2018-08-03 · TA获得超过168个赞
知道小有建树答主
回答量:248
采纳率:40%
帮助的人:49.2万
展开全部
  • 通过[]操作符为对象添加属性时,属性名称可以是任何字符串(包括只包含空格的字符串和空字符串);

  • 通过.操作符为对象添加属性时,属性名称必须是合法的标识符名称;

  • 如果属性名包含非法的标识符字符,则只能采用obj[“propertyName”]的形式;

  • 如果属性名是合法的标识符,读取时即可以采用obj.propertyName,也可以采用obj[“propertyName”]的形式;

纯数字属性名的使用比较特殊,可以通过对象字面量和obj[number]的形式为对象添加纯数字属性,解释器会自动将数字转换为数字字符串。

追问
感谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式