gpt4 book ai didi

javascript - 自动将参数(变量)转换为字符串

转载 作者:行者123 更新时间:2023-12-01 01:20:16 25 4
gpt4 key购买 nike

我制作了一个温度转换函数,我很好奇是否有办法自动将参数转换为字符串。

例如,convertTemp(72, F) --> ConvertTemp(72, 'F'),然后启动该函数。

我知道我可以将参数作为字符串输入,但这让我想知道是否有一种方法可以将(以某种方式错误输入的)变量声明转换为字符串,而不必处理引用错误,该错误指出参数未定义(声明)。

我一直在研究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'),这可以自动更正吗?

最佳答案

从技术上讲,您的问题的答案是“不”。

你必须做一些非常hacky的事情来避免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 block 之外。

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

结论:永远不要这样做,我希望没有人认真对待这一点。

关于javascript - 自动将参数(变量)转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54293886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com