我有一个对象例如:
var extra = {
field1: {
foo: {},
bar: {}
}
}
field1
无法保证设置,如果我需要检查是否存在extra.field1.foo
,我必须使用:
if(typeof extra.field1 != 'undefined') {
if(typeof extra.field1.foo != 'undefined') {
....
}
}
有没有更简单的方法来进行检查?
答案 0 :(得分:4)
您可以使用in
运算符。
如果指定的属性位于指定的对象中,
in
运算符将返回true
。
if ('field1' in extra && 'foo' in extra.field1) {
// true for foo
}
答案 1 :(得分:3)
您可以使用Object.prototype.hasOwnProperty()以及in operator。但为简单起见,您可以检查是否存在这样的属性:
if (extra.field1 && extra.field1.foo ) {
// ...
}
答案 2 :(得分:1)
你可以创建一个接受数组(或字符串)并检查其中每个元素的函数,然后你可以检查代码中只有一个条件的每个嵌套属性的存在。
<table id="example1" class="table table-bordered table-striped">
<thead>
<tr>
<th>Id</th>
<th>Job Id</th>
<th>Job Name</th>
<th>Company Name</th>
<th>Company Id</th>
<th>More</th>
</tr>
</thead>
<tbody>
<tr>
<?php
foreach ($result as $object)
{
?>
<td><?php echo $object['id']?></td>
<td><?php echo $object['job_id']?></td>
<td><?php echo $object['job_name']?></td>
<td><?php echo $object['company']?></td>
<td><?php echo $object['cid']?></td>
<td>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#MyModal_<?php echo $object['id']?>">
Details
</button>
</td>
</tr>
<div id="MyModal_<?php echo $object['id']?>" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<div class="modal-title"><h3>Company Name :<?php echo $object['company']?></h3></div>
</div>
<div class="modal-body">
<h3>Id: <?php echo $object['id']?></h3>
<h3>Job Name: <?php echo $object['job_name']?></h3>
<h3>Job Id: <?php echo $object['job_id']?></h3>
<h3>Paper Size: <?php echo $object['paper_size']?></h3>
<h3>Paper Type: <?php echo $object['paper_type']?></h3>
<h3>Cutting Size: <?php echo $object['cutting_size']?></h3>
<h3>Sheet: <?php echo $object['sheet']?></h3>
<h3>Lamination: <?php echo $object['lamination']?></h3>
<h3>Print Type: <?php echo $object['print_type']?></h3>
<h3>Ctp By: <?php echo $object['ctp_by']?></h3>
</div>
<div class="modal-footer">
<form method="post" action="admin_view">
<button type="button" name="accepted" value="accept" class="btn btn-success">Accept Job</button>
</form>
<button type="button" class="btn btn-danger" data-dismiss="modal">Reject Job</button>
<button type="button" class="btn btn-default" data-dismiss="modal">close</button>
</div>
<?php } ?>
</div>
</div>
</div>
</td>
</tbody>
</table>
Try this code. i thing. you problem will resolved.
答案 3 :(得分:0)
您始终必须检查这两个字段,但您可以用不同的方式编写它们。如果您确定要检查对象,那么以下代码就足够安全了:
if (extra.field1) { //if field1 is not null / undefined / zero / empty string / false
if (extra.field.foo) {...}
...
}
如果field1可以是0或空字符串,那将是不安全的,因为两者都是“虚假”值
答案 4 :(得分:0)
使用Object的hasOwnProperty(prop)执行此任务。
if (extra.hasOwnProperty('field1') && extra.field1.hasOwnProperty('foo')) {
// ...
}
答案 5 :(得分:0)
如果您只想知道对象是否具有特定属性,无论原型链中的哪个位置,您都可以使用in
运算符:
if (myprop in myobj) {
...
}
考虑他的方法将检查您的对象具有的所有属性和方法以及它从&#39;语言获得的方法。 举个例子:
var o = {
"myprop": true
};
if ("toString" in o) {
console.log('toString exists');
}
打印出&#39; toString存在&#39;。
如果您对在对象内部进行检查感兴趣,则必须使用:
if (Object.hasOwnProperty.call(myobject, myprop)) {
...
}
这可以避免使用toString
和hasOwnProperty
这样的继承方法。
肮脏的方式是使用!!
方法:
if (!!myobject[myprop]) {
....
}
这样就强制将任何myobject[myprop]
转换为布尔值。
这个问题,就是你可以有可以转换为false的值,比如空字符串或null或undefined,或者当然是布尔值假!
答案 6 :(得分:0)
此方法可以无限制地检查任何深度。
function exists(node, chainString) {
return chainString.split('.')
.every(prop => node && prop in node ? (node = node[prop]) || true : false);
}
nodes = [
{x: { y: { z: 43 }}},
{x: { y: { z: undefined }}},
{x: { y: null }},
{x: []},
];
console.log(nodes.map(n => exists(n, "x.y.z")));