怎样区分JS的函数中参数带引号与不带引号?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样区分JS的函数中参数带引号与不带引号?相关的知识,希望对你有一定的参考价值。

参考技术A 不带引号标识变量 ,带引号是一个值,如果是数字,你需要var temp=数字,然后 test(temp);\\r\\n另外你如果想用test函数判断里面传来的参数是否是数字,需要在test里面对参数用正则表达式来判断,而不是通过带不带引号来判断的;\\r\\n假定参数为temp\\r\\nif(!isNaN(temp))\\r\\n alert("是数字");\\r\\nelse\\r\\n alert("不是数字");\\r\\n

如何接受不带引号的文本/字符参数

【中文标题】如何接受不带引号的文本/字符参数【英文标题】:How to take in text/character argument without quotes 【发布时间】:2012-10-13 22:57:00 【问题描述】:

抱歉,如果问题不清楚。随意更改它。

所以基本上我试图找到一种方法,使函数的文本/字符串参数不需要引号。

foo  = function(x, y, data)
    n1 = length(data[,x])
    n2 = length(data[,y])
    cat(n1, n1)
 

如果我使用以下代码

data(survey)
foo(Sex, Fold, survey)

我会收到一条错误消息。但如果我使用以下内容:

foo("Sex", "Fold", survey)

foo(1, 5, survey)

这个功能会给我我想要的。所以我想知道是否有任何方法可以构造函数,这样我就不需要在列名周围使用引号。谢谢!

【问题讨论】:

您是否需要 both foo(Sex, Fold, survey)foo(1, 5, survey) 才能使用相同的功能? 是的。如果可以的话,那就太好了! 【参考方案1】:

好吧,这将适用于符号:

foo  = function(x,y, data)
    n1 <- length(eval(substitute(x),data))
    n2 <- length(eval(substitute(y),data))
    cat(n1,n2)  

如果您希望它也适用于带引号的变量名和整数索引,您可以简单地在开始时检查 xy,并使用一些简单的 if-else 分支。

但它带有标准警告,即eval(substitute()) 成语使用起来可能很危险。 (在某些情况下,您可能无法始终预测它不会如何工作,并且当它不起作用时,您可能无法意识到。)

【讨论】:

您能否至少提及一些它何时/如何可能不起作用的情况? @civilstat 我见过的最常见的情况是在处理涉及公式的对象时,其中附加到公式的环境很重要,因此如果您对保留有关信息不是很小心eval() 将无法工作或给出非常意外的结果。 谢谢。乍一看,公式似乎是 eval(substitute()) 的自然用例,因此知道这是有问题的非常有帮助! @civilstat 好吧,你说得对,例如,model.frame 使用eval(但并非在所有情况下都可以替代)。人们通常只是忘记了substitute also 有一个环境参数,所以当他们尝试用自己的方式重新使用作为参数传递给函数的公式时,事情很快就会变得非常复杂。【参考方案2】:

这与数据框的索引 [] 参数有关。

当您说 DF[,x] 时,它是在告诉 R 从 DF 中选择哪一列。如果 x 是来自 DF 的文字列“Sex”,它将告诉 R 你想要向量 DF$Sex 中的所有列。

因此,如果您使用“Sex”/“Fold”或1,5,那么您的功能应该保持原样。如果你想使用SexFold,那么你的函数应该是:

foo = function(x,y,data)
n1 <- length(x)
n2 <- length(y)
cat(n1,n2)

【讨论】:

以上是关于怎样区分JS的函数中参数带引号与不带引号?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式将引号添加到不带引号的 CSV 列

python:解析js中常见的 不带引号的key的 json

mybatis怎样判断list是不是为空

选择函数中数据框的不带引号的列名

涉及变量引用和子表达式的参数模式中不带引号的标记:为啥它们有时会分成多个参数?

在表中插入带引号和不带引号的字符串部分