在JavaScript中,我应该对函数参数的正确类型有多大的信任?
我应该总是使用instanceof和typeof来检查类型吗在JavaScript中,我应该对函数参数的正确类型有多大的信任?,javascript,Javascript,我应该总是使用instanceof和typeof来检查类型吗 addRow : function(rowBefore) { if(rowBefore instanceof Y.PopulateList.makeRow) { this.allRows[row.toString()] = row; row.altered = true; Y.DragAndDrop.addNewDrag(row.rowDiv); node.ins
addRow : function(rowBefore) {
if(rowBefore instanceof Y.PopulateList.makeRow) {
this.allRows[row.toString()] = row;
row.altered = true;
Y.DragAndDrop.addNewDrag(row.rowDiv);
node.insert(row.rowDiv, 'after');
}
else {
console.log('not adding a makeRow');
}
},
或者省略instanceof并相信该参数有效是可以接受的吗?我想知道,因为这是我使用过的唯一一种弱类型语言,所以我对不总是知道所作用对象的类型感到有点不舒服。默认情况下,只需信任即可。只有在必须快速失败时才检查类型 在JS(以及Ruby、Python和类似的动态类型语言)等语言中,这是非常常见的。通过显式检查类型,您的函数变得不那么通用,因此也就没有那么有用了 举例来说,
Array.prototype
中的许多标准JS函数虽然设计用于Array
实例,但有意对其进行编码,以允许传入支持与数组相同操作的任何对象,即使实际上不是数组
。(在中搜索短语“故意泛型”。如果您需要某个特定类型的内容,否则它会中断,请检查其类型或强制将其转换为正确的类型。如果值也是一个问题,那么显然,您也应该检查它的值
这实际上取决于你的论点的来源。如果只是您的代码,那么就没有理由检查您的代码是否正确编写了类型。如果它是外部源(即,您正在编写库函数或接受用户输入的函数),那么您应该验证该参数
简单地说,当您有理由认为类型不正确时,请检查类型。否则,只需编写代码,就不会发生类型不匹配
放弃动态类型将使您最终与该语言作斗争,而不是利用它。正确记录您的代码,其他使用您的代码的开发人员将知道您的函数支持什么类型。如果您没有提供可靠的回退,那么就没有必要检查对象的类型,因为JavaScript将设法自己抛出错误。显然,如果没有数据丢失的危险,最终安全退出程序。对于所有情况,都没有“正确”的答案。代码是否应检查传入参数的类型取决于许多因素: