jQuery.type() 已弃用。检查 var 是不是不是对象时,我应该使用啥来代替? [复制]
Posted
技术标签:
【中文标题】jQuery.type() 已弃用。检查 var 是不是不是对象时,我应该使用啥来代替? [复制]【英文标题】:jQuery.type() is deprecated. When checking if a var is not an object, what should I use instead? [duplicate]jQuery.type() 已弃用。检查 var 是否不是对象时,我应该使用什么来代替? [复制] 【发布时间】:2020-09-27 23:20:33 【问题描述】:jQuery.type() is deprecated in jQuery 3.3 and above. 在重构使用此 API 的旧代码时,我应该使用什么来代替 jQuery.type()?
例如,我的页面所依赖的插件之一使用 $.type() API,如下所示。
if ($.type(button) !== 'object')
throw new Error('button with key "' + key + '" must be an object');
我想用未弃用的东西替换它。
【问题讨论】:
好吧,只是去掉变量名,可能是!button || !button.tagName || button.tagName !== 'BUTTON'
j11y.io/jquery/#v=1.11.2&fn=jQuery.type 你也可以看看源代码,看看他们在做什么
【参考方案1】:
从您的链接中,我点击了折旧版本并到达这里:https://api.jquery.com/category/version/3.3/
让我点击发行说明链接:https://blog.jquery.com/2018/01/19/jquery-3-3-0-a-fragrant-bouquet-of-deprecations-and-is-that-a-new-feature/
我在哪里找到了 github 提交的更改: https://github.com/jquery/jquery/issues/3605 https://github.com/jquery/jquery/commit/1ea092a54b00aa4d902f4e22ada3854d195d4a18
他们贬低了这一点,因为“class2type”表没有处理新的数据类型,以至于没有用处。他们恢复了自己的内部代码以使用 vanilla js typeof
- 我认为这是您的代码库的预期更改。
另外,请参见此处:Difference between JQuery.type and typeof, which is faster 即在阅读某些类型时丢失细节的第二个答案。如果这对您来说有问题,我想这只是@Taplar 建议的那种解决方法/您对这个问题的回答(编辑/更新)。
【讨论】:
【参考方案2】:看来,基于this response,你可以使用typeof yourVariable === 'object' && yourVariable !== null
来判断一个变量是否是一个对象(注意,你还必须检查它不是null,因为JS认为null是对象。)
由于如果button
变量不是对象,我们需要抛出错误,我们应该能够更改代码以使用typeof
,如下所示:
if (typeof button !== 'object' || typeof button === null)
throw new Error('button with key "' + key + '" must be an object');
(请注意,如果button
var 为空,我们必须抛出错误,因为虽然 javascript typeof
将空值视为对象,但它不是我们要查找的对象类型。)
简而言之,您需要将 jQuery.type()
替换为 typeof
比较。
【讨论】:
你也可以短路到未定义。typeof (button || undefined) !== 'object'
以上是关于jQuery.type() 已弃用。检查 var 是不是不是对象时,我应该使用啥来代替? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
react的类型检查PropTypes自React v15.5起已弃用,请使用prop-types