我做了一个温度转换函数,我很好奇是否有将参数自动转换成字符串的方法。
例如,convertTemp(72,F)-> convertTemp(72,'F')然后启动该函数。
我知道我可以以字符串形式输入参数,但是让我想知道是否有一种方法可以将(以某种方式错误输入的)变量声明转换为字符串,而不必处理Reference错误。参数未定义(声明)。
我一直在研究toString()
方法,String()
等,但是它们都转换值,而不是像格式那样的隐式变量。
如果不可能的话,请好奇。
谢谢!
function convertTemp(temperature, format) {
if (format == 'C') return CtoF();
else if (format == 'F') return FtoC();
else return 'Invalid Metric';
function CtoF() {
let F = Math.floor((1.8) * temperature + 32);
return F;
}
function FtoC() {
let C = Math.floor(((temperature - 32) * 5) / 9);
return C;
}
}
TLDR;函数输入为:convertTemp(72,F)而不是convertTemp(72,'F'),可以自动更正吗?
答案 0 :(得分:1)
没有预处理器是不可能的,预处理器会提前清理代码。
您可以将key1 key2 key3 key4 key2
value1 value2 value3 NaN value20
value4 NaN value6 value2 NaN
换成const
。但是我不推荐。
'F'
答案 1 :(得分:1)
从技术上讲,您的问题的答案是“否”。
您必须做一些非常棘手的事情,才能避免使用ReferenceError
,但它们都不是有效的,并且肯定会导致错误,但是为了好玩,我想出了一种黑客应该会使大多数程序员畏缩。
免责声明:在任何情况下,我都不建议这样做
首先让我们考虑一个仅输出其参数的函数
function doStuff(...args){
console.log("Args:", ...args)
}
如果尝试将此函数传递给变量,则必须在某个位置定义该变量。正如其他用户所说的那样,全局变量将是确保在任何范围内定义该变量的唯一方法,我们将在以后使用。
如果您用try / catch包围了参考错误,则可以捕获参考错误的消息。然后,使用正则表达式可以提取缺少的参数,幸运的是,该参数已经是字符串,将其添加到全局范围中,然后只需再次调用该函数即可。
try {
doStuff(A)
} catch (e) {
const [,arg] = e.message.match(/^(.*?) is not defined$/i)
window[arg] = arg
doStuff(A)
}
但这是多余且毫无意义的,所以现在让我们采用以下逻辑,并将其放入一个函数中,该函数将在全局范围内自动为您定义变量,然后再次调用该函数,如下所示:
function wrapError(fn){
try {
fn()
}catch(e){
const [, arg] = e.message.match(/^(.*?) is not defined$/i)
window[arg] = arg
wrapError(fn)
}
}
这里不幸的警告是,您必须将一个函数传递给wrapError
,否则doStuff
将内联求值,并将其错误抛出到try / catch块之外。
wrapError(()=>doStuff(A, B, C))
最后,您得到以下内容,该内容已在Mac上的Chrome上进行了测试。抛出的错误消息可能具有不同的格式或结构,并且此正则表达式不够健壮,因此请记住这一点。
function doStuff(...args){
console.log("Args:", ...args)
}
function wrapError(fn){
try {
fn()
}catch(e){
const [,arg] = e.message.match(/^(.*?) is not defined$/i)
window[arg] = arg
wrapError(fn)
}
}
// With wrapper
wrapError(()=>doStuff(PLZ, DONT, DO, THIS))
// Without wrapper
doStuff(Hello, Error) // ReferenceError
结论:永远不要这样做,我希望没人认真对待这个问题。