Javascript用“;typeof“;没有“;如果“;
Javascript Control many types with "typeof" without "if"
我想知道是否有经典的替代品。
if (typeof firstPost === 'object' && typeof firstPost.active === 'boolean' && typeof firstPost.message === 'string' && typeof firstPost.maxHeight)
为了避免编写更多的代码,可能会循环对象。
我会使用这个:
如果这是用户输入
var firstPost = {
active : true,
message : "hello",
maxHeight : 20
}
然后:
var checks = {
active : 'boolean',
message : 'string',
maxHeight : 'number'
}
try {
for(var key in checks) {
if(typeof firstPost[key] != checks[key]) {
throw new Error(key + " is not " + checks[key]);
}
}
}catch(e) {
alert(e.toString());
}
这不是字节,但它更干净。(它还检查是否定义了所有密钥)
编辑:再紧凑不过了。然而,你可以在另一个地方声明一些函数并调用它
function checkObject(obj,checks) {
for(var key in checks) {
if(typeof obj[key] != checks[key]) {
return false;
}
}
return true;
}
以及简单的
checkObject(firstPost,{
active : 'boolean',
message : 'string',
maxHeight : 'number'
});
您可以详细说明另一个返回类型以指定错误。
如果总是有相同的类型,并且您更频繁地需要这个确切的If,则可以将其封装在函数中。否则,我认为你的if构造是你唯一真正的可能性。当然,您可以创建一个以键为字段名、以值为必需类型的对象,但我不会这么做,因为它将不再易于阅读。
我脑海中唯一能缩短这段代码的是将函数类型包装成这样的东西:
function is(variable, type){
return typeof variable == type;
}
因此,您可以将其称为is(firstPost, 'object')
,依此类推
循环对象或使用其他方式将拥有比您编写的更多的代码。当然,您可以使用"||"方法在javascript或"?:"if-else语句中进行比较。
第一次检查可以简化,因为对象实例是truthy !!{} === true
,并且您不需要专门检查对象,因为您稍后要检查它是否具有属性。
大多数时候,你只需要知道对象内部是否有数据,而不需要确切地知道它是否属于特定类型:
function notUndef (aux) {
return aux !== undefined;
}
if (firstPost && notUndef(firstPost.active) && notUdenf(firstPost.message) && notUndef(firstPost.maxHeight))
如果你有一个很长的属性列表要检查,你可以使用一个循环:
function checkHasProps (obj, properties) {
obj || return false;
var hasAll = true;
properties.forEach(function (prop) {
if (obj[prop] === undefined) {
hasAll = false;
}
});
return hasAll;
}
if (checkHasProps(['active', 'message', 'maxHeight', (...)]));
记住typeof [] === 'object'
,所以typeof
不是一种完全可靠的检查方法。
相关文章:
- 如何知道元素在屏幕上是否可见.如果没有,请滚动页面
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- 如果没有互联网连接,Android WebView离线消息
- 如果没有历史记录,我如何隐藏图像或按钮onclick=;历史.go(-1);
- 如果没有从下拉列表中选择任何值,则允许使用php、mysql、javascript将文本框添加到mysql表中
- 如果没有Ember中的控制器,我如何更改查询参数
- 如果没有添加PHP&Javascript
- 如果没有其他函数链接到promise,则默认行为
- 如果没有document.ready(),我怎么能拥有多个javascript函数呢
- 如果没有任何输入,如何启用按钮
- 有没有一个javascript库可以生成这样的垂直切片背景图像?如果没有,我怎么能创建它
- Jquery自动完成:如果没有选择任何项目,则使tab键选择第一个项目
- 如果设置了位置,如何在每个状态下检查路由器ui,如果没有,则转到登录页
- 如何从网站获得apple touch图标,如果没有;不存在,则显示收藏夹
- 自动单击按钮(如果没有类)
- 我可以通过使用函数绑定来保留默认值吗?如果没有,为什么
- 找到所有元素,如果没有类,则使用 jQuery 添加其他类
- ng,如果没有捕获更新的$scope值
- 从数组中删除值,用新的数组总数更新html或'$'如果没有总计
- JavaScript:如果没有'这'关键字