当你’重新使用您经常需要知道的对象是否已存在于对象中已存在的属性,以便在此操作中有2个解决方案已经很好地工作。但是当您在多个级别寻找未定义的属性时,它迅速变得一团糟。
一个例子
if(typeof object.props1.props2 == "undefined"){ // do stuff }
如果Props1未定义,遗憾的是,您的浏览器将抛出该对象.Props1是未定义的。
倒带一点
首先,让我们’如果您唯一的工作在一个级别,请查看您的选择’s假设您想知道对象是否存在prop1
第一个解决方案:
if(object.hasOwnProperty("props1") ){ // Do stuff }
它非常自探索,如果它在物体中’得到了物业props1,但它不会看原型。这可能是一件好事或坏事,具体取决于你正在寻找的东西。
第二种解决方案:
if(props1 in object){ // do stuff }
这也是一个很好的解决方案,我想你猜到了差异, 如果/ in. 将俯视属性的原型。
一个小警告,使用if / in数组’S不是一个好主意,在这种情况下,它将看原型并找到,例如,ToString。如果您增强了阵列原型,它也会迭代这些原型。
对象深度未知的水平呢。
不幸的是,没有什么生门的。在PHP中,您可以在任何内容上进行ISSET(),它会起作用,我们不是那么幸运。
尽管如此,还有办法做到这一点,这个想法是在对象级别迭代,直到我们删除undefined。
// we pass the object and the props as an array ["props1", "props2"] function isset(object, props){ // we will use the dump variable to iterate in the object var dump, propsLength = props.length -1; // loop in the properties for(x=0;x<props.length;x++){ // first prop? if(x == 0) { // add the object to dump (object.props1) dump = object[props[x]]; continue; } // Undefined? return false if(typeof dump == "undefined" || typeof dump[props[x]] == "undefined"){ return false; }else{ // move in the object level // object.props1.props2 // object.props1.props2.props3 dump = dump[props[x]]; // return true, of even return the object back if(x == propsLength) return true; } } }
你会用它来用它:
if( isset(object, ["props1", "props2", "props3"]) ){ // do stuff }
演示
(需要console.log)查看演示
那’s it
I’我肯定可能有点优化,但你知道,它的工作很好,希望它也可以帮助你们!
凉爽的,
我实际上看着没有无限的方式做到这一点’s 😛
jQuery GetObject插件也是如此,查看:
http://benalman.com/projects/jquery-getobject-plugin/
(此外,jQuery是可选的)
– Ben
漂亮的插件ðÿ〜>
你好。你博客似乎很好。我会继续继续阅读它ðÿ™,谢谢。
nice.i会尝试在我的身上使用它 网站