我在Javascript中有一个代码,该代码运行带有引用.code的If语句。我到处搜索以查找原因,但没有找到有用的答案。这是一个示例:
function X(Y) {
if ((ord.status == JSON.stringify( (JSON.parse(ord.status).code == ordStatus.Del.code)){
//code here
}
}
答案 0 :(得分:4)
.code
在这里不是“扩展名”。它是对Javascript对象的code
属性的引用。
在这里,ord.status
是一个字符串,可以将其解析为包含code
属性的Javascript对象。
JSON.parse(ord.status)
将ord.status
字符串解析为Javascript对象。然后,.code
引用该对象中的code
属性。
答案 1 :(得分:0)
正如我评论的那样,您的括号不匹配,这意味着这段JavaScript无效。不过,我将进行一次诚信分析,并假设缺失的括号将出现在if
表达式的末尾,然后位于正文之前。
由于您的问题似乎是关于将if
应用于其的.code
语句,因此我们只需解析该表达式以了解使用operator precendence的Mozilla文档作为参考的情况。我们将使用假设方法m
替换// code here
,然后使用I
表示标识符,E
表示表达式和S
表示声明:
if ((ord.status == JSON.stringify( (JSON.parse(ord.status).code == ordStatus.Del.code)))){ m(); }
IF (( I . I == I . I ( ( I . I ( I . I ). I == I . I . I )))){ E(); } // lexing
IF ((I.I == I.I((I.I(I.I).I == I.I.I)))){ E(); } // remove spaces
IF ((E.I == E.I((E.I(E.I).I == E.I.I)))){ E(); } // get names from scope
IF ((E.I == E.I((E.I(E).I == E.I.I)))){ E(); } // member access
IF ((E.I == E.I((E(E).I == E.I.I)))){ E(); } // member access
IF ((E.I == E.I((E.I == E.I.I)))){ E(); } // function invoke
IF ((E.I == E.I((E == E.I.I)))){ E(); } // member access
IF ((E.I == E.I((E == E.I)))){ E(); } // member access
IF ((E.I == E.I((E == E)))){ E(); } // member access
IF ((E == E.I((E == E)))){ E(); } // member access
IF ((E == E((E == E)))){ E(); } // member access
IF ((E == E((E)))){ E(); } // equality check
IF ((E == E(E))){ E(); } // parentheses
IF ((E == E)){ E(); } // function invoke
IF ((E)){ E(); } // equality test
IF (E){ E(); } // parentheses
IF (E){ E; } // function invoke
IF (E){ S } // expression eval statement
IF (E) S // block statement
S // if statement
如您在此处看到的,每次使用成员访问操作(.
)时,正确地将其分别应用于左侧的表达式和右侧的标识符。不会将其应用于if
语句,并且if
语句已正确地解析为整个语句。尽管我确实添加了额外的括号以使您的答案有意义,但结果仍然相同,因为只有在右边的很多括号内,这种可能性才会出现。