引用和数据类型检查,这些是相同的
Reference and datatype checking, are these the same?
我的库中有一个简单的函数,用于检查对象引用的有效性(这里的对象是指对创建的HTML元素的引用,主要是DIV的(。它看起来像这样:
function varIsValidRef(aRef) {
return ( !(aRef == null || aRef == undefined) && typeof(aRef) == "object");
}
在实验过程中,我发现这具有相同的效果:
function varIsValidRef(aRef) {
return (aRef) && typeof(aRef) == "object";
}
我知道关于速记((测试存在一些争议?在针对各种数据类型(null、未定义、整数、浮点数、字符串、数组(进行测试时,我发现最终结果没有差异。该功能似乎按预期工作。
可以肯定地说这两个版本做完全相同的事情吗?
不,在我看来,这些功能的工作方式不同:
第一个选项
如果aRef
不是undefined
或null
,并且变量的类型是object
则返回 true。
第二种选择
首先,我们将aRef
转换为布尔值。像null
、undefined
和0
这样的值变得false
,其他一切都变得true
。如果它是true
(因此不是这些值之一(,它会检查类型是否为 object。
因此,如果aRef
是0
,则第二个选项返回 false,这是您不想要的。而且这不是一种优雅的检查方式,因为您可以检查对象或字符串或其他东西是否等于布尔值。
至少他们不会返回同样的东西。第一个选项返回布尔值,但如果(aRef)
为 false,则第二个选项返回您在函数中输入的值:
varIsValidRef(0);
>>> 0
varIsValidRef('');
>>> ""
varIsValidRef(undefined);
>>> undefined
varIsValidref(null);
>>> null
因为 JavaScript 将这些值用作假值,所以如果你使用 if 语句或类似的东西,你看不到这些返回值之间的区别。
所以我建议你使用第一个选项。
有很大的不同:
!(aRef == null || aRef == undefined)
使用以下任何一种"null", null, "undefined", undefined
,此部分的评估结果为 false。
(aRef)
而这个与这些0, "", false, null, undefined, NaN
中的任何一个
有趣的情况,但尽管完全不同,但两者的行为方式相同似乎是合乎逻辑的。让我们看看第一个状态。
return ( !(aRef == null || aRef == undefined) && typeof(aRef) == "object");
这里
null
和 undefined
都表示与!
infront 相结合的false
状态,使其等于表达式 aRef
,如果两者都不为 null 或未定义,表达式将返回 true
。
他们不会做同样的事情,尽管他们最终得到相同的结果。
第一个函数在将什么算作 false 方面更加严格,或者如果不是,如果它是一个对象。
第二个函数将检查aRef
是否!false
任何 falsy 值(即 []
、null
、undefined
(,如果不是,则检查类型是否是对象。
我更喜欢第一个函数,因为它接受的内容更严格,但如果它都一样,则应使用性能最佳的函数。
至于争议,确实你必须小心如何在方程中使用 falsy 值,但如果它做了你想要它做的事情(为此你需要知道什么是 falsy 值(并且你正确地实现了它应该没有问题。不过,这两者很难放在一起。因此,如果它做了您想要它做的事情,并且仅此而已,请务必使用它。
- javascript解释器如何理解变量的数据类型
- 从查询字符串参数推断出正确的数据类型
- 为什么不'我们在javascript中使用函数参数的数据类型
- 基于数据类型的编辑框的汇总列表
- 如何降低此函数的复杂性,该函数根据数据类型进行回调
- 比较和分配数据类型的困难
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- JavaScript严格类型检查失败
- E4X中是否有一种方法可以将基元数据类型的XMLList转换为类似于Array.join()的Array
- Highcharts系列.数据数据类型限制
- 如何在php循环中显示隐藏的数据类型
- 如何从标签数据类型=“;无线电”;
- 有没有一种方法可以在Typescript中自动检查数据类型的数据相等性
- 检查数组中元素的数据类型是否为日期对象的最简单方法
- 如何在节点JS中检查数据类型 - 特别是整数
- 引用和数据类型检查,这些是相同的
- 如何检查ng-repeat中的数据类型
- 将变量数据类型解析为一个函数,该函数在JavaScript中包含对数据类型的条件检查
- 检查数据类型jquery或javascript
- 数据类型检查提示复选框javascript