在JavaScript中使用(.code)的目的是什么?

时间:2018-09-25 22:47:34

标签: javascript

我在Javascript中有一个代码,该代码运行带有引用.code的If语句。我到处搜索以查找原因,但没有找到有用的答案。这是一个示例:

function X(Y) {
    if ((ord.status == JSON.stringify( (JSON.parse(ord.status).code == ordStatus.Del.code)){ 
        //code here 
    }
} 

2 个答案:

答案 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语句已正确地解析为整个语句。尽管我确实添加了额外的括号以使您的答案有意义,但结果仍然相同,因为只有在右边的很多括号内,这种可能性才会出现。

相关问题