我可以在JS中使用什么而不是typeof

时间:2014-03-06 10:19:14

标签: javascript boolean-logic typeof

如果我有内部对象的javascript数组,就像这样

articlesParams[itemId].properties.loaded

如果我尝试这样做:

if ( typeof articlesParams[itemId].properties.loaded != 'undefined' && ...) {
    // do something...
}

我遇到过问题,如果articleParams [itemId] .properties未定义我得到一个错误:无法读取属性'属性'未定义的。

所以在这种情况下,我应该做一些像这样的蠢事:

if ( typeof articlesParams[itemId].properties != 'undefined' &&  
        typeof articlesParams[itemId].properties.loaded != 'undefined'  && ...) {
    // do something...
}

在PHP中是否有任何等效的PHP isset()?

3 个答案:

答案 0 :(得分:1)

另一种方法就是这样做,这在JS中非常典型:

if (articlesParams[itemId] &&
    articlesParams[itemId].properties &&  
    articlesParams[itemId].properties.loaded  && ...) {
    // do something...
}

或者这个:

var item = articlesParams[itemId];
if (item && item.properties && item.properties.loaded  && ...) {
    // do something...
}

需要注意的一点是,即使ifloaded,如果您希望执行false语句,也不会有效。在这种情况下,最好使用undefined检查typeof是否为{{1}}。

答案 1 :(得分:1)

虽然详细,用于检查变量是否未定义的标准JavaScript惯用法确实使用typeof ,实际上看起来很像你写的。没有单独的JavaScript等效于PHP的isset()

只提供两项小改进:

像这样:

var item = articlesParams[itemId];
if (typeof item !== 'undefined') {
   var props = item.properties;
   if (typeof props !== 'undefined') {
       var loaded = props.loaded;
       if (typeof loaded !== 'undefined') {
           // do something...
       }
   }
}

当然,如果loadedprops等未被重复使用,那么为它们定义变量的动机很小。

答案 2 :(得分:0)

正如大家所说,你可以链接很多类型的表达式。可替换地....

var result;
try {
   result=typeof articlesParams[itemId].properties.loaded;
} catch(e) {
   result='undefined';
}
if ('undefined'==result) {
    // do something
}

但是您可能会将此应用于方法而不是变量,因此它应该抛出不同类型的异常。此外,它不能简单地作为一个函数包装(因为当您尝试调用函数时,将发生异常,而不是在函数体中)。而且,与链接的typeof表达式相比,您需要做的键入量或者易于理解代码的功能几乎没有节省。

这样做可能更合适:

try {
   typeof articlesParams[itemId].properties.loaded;
} catch (e) {
   // do something
}