点号表示法中的点是一个运算符还是其他什么?如何确定?

4

我正在尝试对点符号(object.property)中使用的“点”标记进行分类。

作为一名自学的业余开发人员,主要使用JavaScript,我对编程和JavaScript有一个简化的(肯定是不完美的)理解。

阅读代码时,我倾向于将标记分为五类:

  1. 标识符(+保留关键字)
  2. 运算符
  3. 分隔符/标点符号
  4. 字面量
  5. 注释

但是,当涉及到根据我的简化模型对点符号中使用的点进行分类时,我有些疑惑,但也许这种分类方式并没有意义。

我认为它更像一个二元运算符,它取两个标识符并返回引用(可能是分隔符?)。 但是我没有找到一个明确确定此事的来源。(或者至少能够明确确定并且我能够理解的来源)。

我查看了各种文档,包括ECMA规范。

因此,这里有两个问题:

  • 您认为我可以在哪里找到我正在寻找的信息,或者我可以使用哪些关键字?
  • 您认为点标记的分类是什么?二元运算符?您是如何知道的?

这不是一个运算符,而是一个属性访问器。MDN参考 - VLAZ
是的,我看过了。但是我正在尝试(可能很愚蠢)根据一个简化模型对其进行分类。 - mel
1
是的,你可以称它为成员运算符。 - Bergi
2个回答

3
从语法上来看,它是一个后缀运算符。也许更好的称呼是一系列后缀运算符,每个合法的标识符都可以跟随它。
它类似于下标符号v [a],虽然它有两个值作为操作数,但在语法上最好也将其视为(有界)后缀运算符。同样地,我们可以将所谓的三元运算符cond ? alt1:alt0称为有界二元运算符。从语法上来看,“运算符”是? alt1: 这种语法观点可能一开始看起来有点奇怪,它来自于运算符语法的描述,基本形式为使用⟨⟩进行分组,*表示可选的重复(即,0次或多次实例,就像正则表达式中一样)。
⟨ PREFIX*  OPERAND POSTFIX* ⟩ ⟨ INFIX ⟨ PREFIX*  OPERAND POSTFIX* ⟩ ⟩*

这种表达方式通过在OPERAND中(递归地)包含( EXPRESSION )来处理括号,因为括号用于分组,通过在POSTFIX中包含( EXPRESSION_LIST )来处理函数调用中使用的括号。

以这种方式查看表达式有助于解析。它还有助于澄清优先级和结合性的含义,特别是对于定界运算符。

运算符优先级的一般规则是,我们首先将所有后缀运算符赋予相同的最高优先级。这不是理论上必要的,但它几乎总是导致预期的含义。没有人会将2+sin(0.5)解释为对"函数"2+sin的调用。更相关于您的问题,2+s.size直观地意味着首先将.size应用于s,然后将结果加上2。


2
如果你专注于纯点符号表示法,尤其是如果你以JS为例,那么它就是一个“分隔符”。
当然,这并不适用于添加功能的框架或形状。例如,自动化私有属性的get/set调用的框架或类似框架。
为什么?因为点符号表示法是方括号表示法或倒置的替代方法。而方括号是一个分隔符。 thing['otherthing']thing.otherthing相同。

1
我知道仅仅发表评论来表明我觉得你的回答很有趣是不恰当的,但由于我的账户是全新的,我无法将其标记为有用。 - mel
@mel 如果我没记错的话,这个有时间限制。只需要等待2小时,我想应该就可以了。 - user47589
@mel,你的意思是你不能接受一个答案,还是只能点赞? - lealceldeiro
我不是来为了投票的 :) 做你能做/想做/想要做的... 我希望你们几乎都会发现它有用。干杯,欢迎。 - Sam
我无法点赞,因为我的声望<15。我没有关闭问题,因为我正在考虑此时此刻的情况。我对编程有限的了解,感觉我的问题有点毫无意义,因为我试图根据我基于复杂事物简单表达的意愿所发明的模型来对令牌进行分类。也许我不应该在我的问题中使用JavaScript,而是使用一种虚构的语言。 - mel
如果你觉得这对你有用,那么它也可以对其他人有用。我们都在学习。我建议不要关闭这个问题。这是一个好问题,可以分类并澄清。直到今天我也没有向自己提出这个问题。我们总是在学习中发现一些东西。 - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接