【问题标题】:Is the dot of dot notation an operator or something else ? How do you know?dot of dot notation 是运算符还是其他东西?你怎么知道?
【发布时间】:2019-11-07 07:35:59
【问题描述】:

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

作为一名自学成才的业余开发人员,主要使用 JavaScript,我对编程和 JavaScript 的理解很简单(当然也不完美)。

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

  1. 标识符(+ 保留关键字)
  2. 运营商
  3. 分隔符/标点符号
  4. 文字
  5. cmets

但是当谈到根据我的简化模型对点符号中使用的点进行分类时,我有一个疑问,但也许尝试这样分类没有意义。

我认为它更像是一个二元运算符,它接受两个标识符并返回一个引用(它可以是一个分隔符吗?)。但我没有设法找到明确证实这一点的来源。 (或者至少可以清楚地建立它并且我能够理解)。

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

所以这是我的两个问题:

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

【问题讨论】:

  • 不是运算符。它是一个属性访问器。 MDN reference
  • 是的,我已经看到了。但我正在尝试(这可能是愚蠢的)根据简化模型对其进行分类。
  • 是的,你可以称之为会员运营商。

标签: javascript token semantics lexical-analysis formal-languages


【解决方案1】:

在语法上,它是一个后缀运算符。或许将其称为一系列后缀运算符会更好,每个后缀运算符对应一个可以跟随它的合法标识符。

它类似于下标符号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 相同

    【讨论】:

    • (我知道我不应该发表评论只是说我发现你的答案很有趣,但我无法将其标记为有用,因为我的帐户是全新的。)
    • @mel IIRC 有时间限制。等2小时吧,我想。
    • @mel,你的意思是你不能accept 回答还是只能upvote
    • 我不是来投票的 :) 做你能做的/渴望的/想要的...我希望几乎你会觉得它有用。干杯和欢迎。
    • 我无法投票,因为我的声誉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    相关资源
    最近更新 更多