首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么在ES2015中将Object.keys更改为强制将原语转换为对象?

为什么在ES2015中将Object.keys更改为强制将原语转换为对象?
EN

Stack Overflow用户
提问于 2019-06-04 18:29:10
回答 1查看 91关注 0票数 6

有人知道从将原语传递给Object.keys时抛出错误到静默地将原语强制到对象并返回结果的变化背后的原因吗?

我不确定是否有人会期望Object.keys('abc')返回[0, 1, 2],而且它似乎违反了“不要破坏网络”的首要指令。如果某些网站的代码将对Object.keys的调用包装在try/catch中,以处理调用者错误地传递原语,该怎么办?

这就是为什么我觉得这种变化背后一定有很强的理由。如果有人有关于这方面的信息,我会非常感兴趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 18:01:48

我找不到任何关于这个决定的内容,所以我只能提供我自己的观点。

正如一位评论员指出的那样,这是ES 2015更大趋势的一部分,允许更广泛的非对象输入。在ES 2015规范中,短语“在以前的版本中,非对象参数总是导致抛出TypeError”出现在Object上的10个不同的方法中。

首先,此更改使Object.keys的行为与for-in循环的行为一致,后者始终能够对原语进行操作。考虑到规范已经要求Object.keysfor-in之间的顺序匹配,因此要求相同的有效操作数集似乎并不奇怪。

这种改变看起来几乎和对现有代码一样无害,同时大大降低了Object.keys的脆弱性。即使在使用try-catch的情况下,也很难想象成功执行Object.keys会导致实际问题。我可以很容易地想象这样的代码:

代码语言:javascript
运行
AI代码解释
复制
try {
    var keys = Object.keys(input);
} catch {
    // oops, input was a primitive; call `new [Constructor]` to wrap it
    var keys = Object.keys(
        new input.constructor(input)
    );
}

但是,当Object.keys没有出错时,这并不会中断;成功的Object.keys调用会使catch代码过时。

当然,在某些地方可能存在这样的代码:

代码语言:javascript
运行
AI代码解释
复制
try {
    var keys = Object.keys(input);
} catch {
    // oops, input was a primitive; that unlocks the secret prize
    giveUserAFreePuppy();
}

基本上,通过一个非常愚蠢的例子,我想说的是,对于某些代码的操作来说,跳过catch块确实有问题的情况看起来是如此牵强,以至于为了获得一个不那么脆弱的Object.keys函数,破坏这些代码似乎是一个很小的代价。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56449448

复制
相关文章
在Java中将ArrayList转换为Array
In this tutorial you will learn how to convert ArrayList to Array in Java.
用户7886150
2021/04/29
1.8K0
python json转字符串_在python中将json转换为字符串
一开始我没有清楚地解释我的问题。在python中将json转换为字符串时,请尝试使用str()和json.dumps()。
全栈程序员站长
2022/11/16
10.4K0
在 Python 中将数值变量转换为分类变量
这篇文章是今天发布的CTGAN的补充,我们可以使用pandas的cut函数将数据进行离散化、将连续变量进行分段汇总,这比写自定义函数要简单的多。
deephub
2021/11/16
2.1K0
如何在 TypeScript 中将字符串转换为日期对象?
在应用程序中,我们经常需要将日期字符串转换为日期对象。在 TypeScript 中,由于类型系统的存在,这个过程可能需要一些额外的步骤。在本文中,我们将讨论如何在 TypeScript 中将字符串转换为日期对象,并解决在此过程中可能遇到的一些问题。
网络技术联盟站
2023/06/07
3.6K0
java对象转换为json字符串_java中将字符串转换为json
Jackson提供了三种可选的json处理方法:流式API、树模型、数据绑定(data Binding),其中数据绑定是最常用的处理方式;本文主要介绍数据绑定的处理方式。
全栈程序员站长
2022/09/27
2.9K0
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
11.6K0
代码重构实战-将值对象改为引用对象(Change Value to Reference)
一个数据结构中可能包含多个记录,而这些记录都关联到同一个逻辑数据结构。例如,我可能会读取一系列订单数据,其中有多条订单属于同一个顾客。遇到这样的共享关系,既能将顾客信息作为值对象看待,也能将其视为引用对象:
JavaEdge
2022/04/06
8580
jackson将json转换为json对象
高久峰
2023/07/02
3940
将JavaBean对象转换为Map集合
使用jackson-databind可以将JavaBean对象属性转换为Map集合。
编程随笔
2022/04/29
1.8K0
js将json字符串转换成json对象_java中将字符串转换为json
private static String dateformat = “yyyy-MM-dd hh:mm:ss”;
全栈程序员站长
2022/11/08
5K0
在PHP中将图片转换为base64编码的方法
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。
魏杰
2022/12/23
1.3K0
java将字符串转换为json对象的方法_java jsonobject转string
在与服务器交互的时候,我们往往会使用json字符串,今天的例子是java对象转化为字符串,
全栈程序员站长
2022/11/08
21.4K0
linux中将图像转换为ASCII格式
本指南介绍如何在 Linux 中将图像转换为 ASCII 格式。我们将使用Jp2a。Jp2a 是一个命令行工具,可帮助你将给定的图像转换为 ascii 字符格式。你可以指定图像文件和 URL 的混合,Jp2a 工具会立即将它们全部转换为 ascii 字符。Jp2a 有许多有用的选项来处理图像。 从标准输入读取图像, 将背景模式设置为浅色或深色, 设置边框, 设置输出高度和宽度, 为输出图像设置自定义尺寸, 垂直或水平翻转输出图像, 在生成输出 ASCII 图像时使用特定字符, 反转图像, 从网上下载图像并转
入门笔记
2022/06/02
4.2K0
linux中将图像转换为ASCII格式
Java中将Map转String,String转Map
但很多时候并不能直接将Map对象的toString() 而是应该转换为JsonObject后再调用toString()后存入就正常了
JavaEdge
2021/02/22
14.5K0
Java通过Jackson将任意对象转换为HashMap
最近和西瓜支付对接项目,由于西瓜支付SDK中需要对请求参数生成签名,但是SDK依赖Fastjson,我们的项目中禁止使用Fastjson,于是进行替换下,以下是原始的代码,通过FastJson将请求参数转换为Json再转换为HashMap:
高久峰
2023/09/04
1K0
如何在 Python 中将数字转换为字母?
在编程中,有时我们需要将数字转换为字母,例如将数字表示的年份转换为对应的字母表示,或者将数字编码转换为字母字符。Python 提供了多种方法来实现这种转换。本文将详细介绍在 Python 中将数字转换为字母的几种常用方法,并提供示例代码帮助你理解和应用这些方法。
网络技术联盟站
2023/06/01
2K0
【已解决】将LinkedHashMap转换为需要的对象
通过这样转换之后,list类型转换为我需要的数据类型,然后可以进行接下来的工作,方法在Jackson的ObjectMapper包中。
凯哥Java
2022/12/16
4.2K0
【已解决】将LinkedHashMap转换为需要的对象
sqlserver日期转字符串 yyyymmddhhmmss_sql中将date转换为字符串
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
4.8K0
C# 可空引用类型 Nullable 更强制的约束:将警告改为错误 WarningsAsErrors
于是 C# 8.0 带来的可空引用类型由于默认以警告的形式出现,所以实际上约束力非常弱。
walterlv
2023/10/22
4110
C# 可空引用类型 Nullable 更强制的约束:将警告改为错误 WarningsAsErrors
laravel中将session由文件保存改为数据库保存
1.laravel中默认是使用文件保存session的,保存在/storage/framework/sessions下
全栈程序员站长
2022/07/07
1.7K0

相似问题

在与服务线程不同的线程上运行服务操作。

10

在UI线程上运行的服务中是否运行可运行的

46

在非UI线程上运行RIA服务

11

Android服务在UI线程上运行时如何处理“长时间运行”操作

12

Web服务可以在我的pc上运行,但不能在服务器pc上运行

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文