【发布时间】:2017-06-24 00:45:57
【问题描述】:
当我想在 JavaScript 中使用一些相对较新的方法时,比如说history.pushState,我应该在调用它之前检查它是否真的可用。我发现人们正在使用许多不同的方法来检查方法的可用性,我曾经使用自己的简单方法,这在每种情况下都对我有用。无论如何,我仍然不确定我的方法是否完全正确且广泛兼容,因为过度使用不太舒服的方式让我思考,人们使用这种方式而不是简单方式的真正原因是什么。
所以我希望回答说我的方法也完全可以,或者解释一下,在哪些情况下我的方法可能会失败,因此使用它不好。
我是这样用的:
history.pushState && history.pushState('?attr');
只是因为提前拒绝了条件,如果pushState不存在,就不会被调用。它适用于我尝试过的所有方式,并且没有任何警告。
其他不太舒服的方式,我发现人们正在使用(在 IF 中):
typeof(history.pushState) == 'function'typeof history.pushState !== 'undefined'"pushState" in historytypeof(history.pushState) === typeof(Function)
我的看法
在我看来,在 JavaScript 中检查变量的可用性或命名我的 if (anythingUndefined) {} 是完全可以的。当然,当变量为 0、false、null 等时,它可能是假阴性,但这不是我的问题的重点,因为以这种方式测试方法或对象总是等于 true。
【问题讨论】:
-
typeof(Function)是没有意义的,因为即使Function是一个函数,Array也是一个函数,但是你不会检查带有typeof(Array)的数组。
标签: javascript