为什么要在 Javascript 中将对象中的所有值转换为字符串?

萨尔尤马

免责声明:我的经验主要是使用静态类型语言进行开发,即使我了解动态类型的工作原理,我对常见实践也不是很熟悉,也不太了解通常的提示和技巧。

我最近开始在一个项目中工作,在该项目中我们使用无服务器并使用 javascript 在 AWS 中部署一些 lambda。在深入研究现有代码后,我发现了一个让我有点震惊的常见做法:

当调用 lambda 并接收到 JSON 负载时,会进行初始预处理,将对象中的所有值转换为字符串。

const mapValues = require('lodash/mapValues')
const escape = require('validator/lib/escape')
...
const body = mapValues(requestBody, value => escape('' + value))
...

然后在预处理之后,真正的工作开始(验证、处理、调用其他服务等......)

我的第一个想法是:

  • 好处:有助于减少可能的不同类型的认知负荷,从而假设一切都将始终是一个字符串。

  • 缺点:处理非字符串值(例如数字)的额外复杂性。

Q1:使用这种方法还有其他好处和缺陷吗?

Q2:这会被认为是一种不好的做法吗?如果是这样,为什么?(请是事实,不是观点)

提前致谢!:)

塔马斯·赫格杜斯

有趣的问题。我建议你问问作者他们是否有空。以下是我的一些想法:

我认为拥有字符串值不会减少但会增加认知负荷,因为在进行基本算术时您必须注意转换它们。我相信我们所有的人至少看过一次1+111

此外,将每个数据作为字符串处理是一种非常糟糕的做法,它甚至有自己的模拟名称:字符串类型。这是这方面的食谱示例。

我能想到的唯一正当理由是防止针对服务的各种注入攻击。在某些情况下,如果允许用户发送任意 json,则可能使服务执行它通常不会执行的代码路径。(像{"__proto__":[],"length":1,"0":"foo"}coerects一样古怪的东西"foo"但它是 typeof 对象,这可以绕过一些有缺陷的验证逻辑。mongodb 也容易受到一些类似的攻击)。但即使在这种情况下,正确的验证也比将每个值转换为字符串要好得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么要在 javascript 中打印“NaN”值?

为什么要在javascript闭包中打印此值?

在Javascript中将对象承诺转换为字符串

为什么要在javascript中的每个函数之后使用分号?

为什么要在函数中声明调用javascript类方法?

在 JavaScript 中将对象中的字符串转换为数字

Chrome为什么要在包含Javascript文件后添加查询字符串参数?

如何在javascript中将对象中的所有字符串变为大写

将对象转换为javascript中的字符串,而键中没有引号

什么时候以及为什么要在JavaScript中“返回假”?

为什么字符串无法从Javascript转换为PHP?

为什么要在JavaScript中的JSON对象数组中创建额外的数组数组

为什么需要在对象中的函数中的if语句中的“ this”内部而不是外部?的JavaScript

如何在JavaScript中将对象属性字符串转换为整数

如何在javascript中将对象转换为字符串?

为什么我的JavaScript程序没有将其转换为整数而不是字符串?

为什么要在javascript类中设置像这样的默认参数?

当您可以构建常规函数时,为什么还要在Javascript中构建静态函数?

为什么Javascript将字符串中的数字转换为数字?

使用原生JavaScript将对象转换为字符串

如何将对象转换为字符串javascript

JavaScript:为什么要在循环中进行两次迭代以删除 DOM 中的所有 iframe 元素

为什么没有在JavaScript中将字符串添加到数组中?

angularjs-JavaScript-将对象值从字符串转换为数组结构

为什么我的函数没有从数组中删除所有字符串?javascript

为什么有些字符串会转换为数字,而另一些字符串却不在javascript中

将对象转换为具有所需模式的字符串:Javascript

javascript将对象数组转换为字符串以存储在s3中

在 JavaScript 中将字符串转换为对象