我正在尝试对点表示法(object.property
)中使用的“点”标记进行分类。
作为一个自学成才的业余开发人员,主要使用JavaScript,我对编程和JavaScript有了简化的(当然是不完美的)理解。
在阅读代码时,我倾向于将令牌分为五类:
但是,当要根据我的简化模型对点表示法中使用的点进行分类时,我有一个疑问,但是也许尝试以这种方式进行分类没有任何意义。
我更像一个二进制运算符来查看它,它使用两个标识符并返回一个引用(可以是定界符吗?)。但是我没有设法找到一个明确的证据。 (或者至少可以清楚地确定它并且我能够理解)。
我查看了各种文档,包括ECMA规范。
这是我有两个问题:
答案 0 :(得分:2)
如果您专注于纯点符号,而如果您以JS为例,则更多,它是定界符。
当然,它不适用于添加功能的框架或形状。例如,一个自动执行对私有属性或类似属性的获取/设置调用的框架。
为什么?因为点表示法是替代半形符号或上下颠倒的一种方法。胸像是定界符。
thing['otherthing']
与thing.otherthing
答案 1 :(得分:1)
从语法上讲,它是一个后缀运算符。也许最好将其称为后缀运算符家族,每个可跟随其后的合法标识符一个。
它类似于下标符号v[a]
,即使它有两个值作为操作数,也可以更好地在语法上将其视为(定界)后缀运算符。同样,我们可以将所谓的三元运算符cond ? alt1 : alt0
称为定界二元运算符。语法上,“运算符”为? alt1:
这种语法视图最初可能看起来有点奇怪,来自对运算符语法的描述,该语法基本上具有以下形式:使用⟨⟩
进行分组,使用*
进行可选重复(即,0个或多个实例(如正则表达式中一样)。
⟨ PREFIX* OPERAND POSTFIX* ⟩ ⟨ INFIX ⟨ PREFIX* OPERAND POSTFIX* ⟩ ⟩*
该公式通过将( EXPRESSION )
包含在OPERAND
中(递归)来处理括号,因为括号用于分组,而在( EXPRESSION_LIST )
中包含POSTFIX
则用于函数调用中的括号。
以这种方式查看表达式有助于解析。它还有助于阐明优先级和关联性的含义,特别是对于定界运算符。
运算符优先级的一般规则是,我们首先为所有后缀运算符赋予相同的最高优先级。从理论上讲这不是必需的,但几乎总会导致预期的意义。没有人会把2+sin(0.5)
解释为对“函数” 2+sin
的调用。与您的问题更相关,2+s.size
直观地意味着.size
首先应用于s
,然后将2添加到结果中。