将JavaScript表达式作为字符串,如何提取表达式中使用的变量名称,并超越它,提取在这些变量上访问的任何属性的名称?
这些表达式由另一位作者使用他们自己的个性化名称撰写,例如cabbage
和elephant.weight
。
表达式可能很简单,例如:firstName
,name.charAt(0)
,c.radius * Math.PI
但也可能是复杂的事情:
(function(){
var fruit = apple || banana.length;
if (fruit > citrus.lime) {
fruitSalad += "," + citrus.lemon;
// ...
return lemon.split(/[0-9]+/);
}
return fruitBowl.width * fruitBowl['amount'] * Math.SQRT2;
})();
运行上述表达式将引发引用错误,除非定义了apple
之类的变量。如果我有一种解析表达式并提取未定义变量名的方法,我可以记下它们,并在以后运行表达式而没有任何问题,每个变量都有值。
此外,如果我可以注意哪些变量具有属性以及这些属性的名称,那么我也可以初始化这些属性。
fruit = apple = banana = fruitSalad = "";
citrus = { lemon: "0", lime: "1" };
fruitBowl = { width: "10", amount: "30" };
// run the expression
isTrue? yesText : noText
。由于访问对象的未定义属性不会产生错误,因此无法注意这些错误。 注意:假设不会使用eval
。变量将始终是字符串或属性为字符串的对象,因此知道变量的类型不是问题,只有使用的名称。可以忽略表达式中使用的函数名称。