未定义对象子属性的Javascript类型
Javascript typeof of undefined objects subproperty
假设我想检查对象Foo的属性是否定义,我将在此场景中使用:
typeof Foo.property != 'undefined'
但是,如果不仅属性不存在,而且对象未定义,则会导致错误。
是否有任何单行方法来检查是否定义了对象属性,并在以下情况下返回false:
为什么我想要这个:我在NodeJS中编写一个脚本,它使用一个类,它也将在前端使用,而不是维护两个不同的文件,这将最终基本相同,除了两个环境的微小变化,我想用一些基本的IF逻辑区分环境。
其他可能的用例:假设我们有以下对象:
function Foo() {
this.case1={
info1: 'something',
info2: 'something',
.....
info1000: 'something'
}
this.case2={
info1: 'something',
info2: 'something',
......
info1000: 'something'
}
}
如果我想决定哪种情况适用于我,并且决定取决于内部信息的一个,我首先必须检查各自的情况是否存在,然后检查各自的信息是否存在(2个条件):
if (typeof Foo.case1 != 'undefined') && (typeof Foo.case1.info1 != 'undefined')
如果这是一个更深层次的嵌套对象,将会有大量的条件检查和输入,以获得一些基本信息:如果case1根本不存在,那么我将使用case2。
您可以使用和 (&&
)子句。
typeof Foo !== 'undefined' && typeof Foo.property !== 'undefined'
或者更简单地说:
Foo !== undefined && Foo.property !== undefined
编辑:正如David Titarenco指出的那样,这是由于短路评估而起作用的。这基本上意味着,如果第一部分求值为false (Foo !== undefined
),那么第二部分永远不会求值。
我想到的最简单的答案是这样的。它不像你的那样百分之百严格,但只有在非常罕见的情况下才能打破它:
if (Foo && 'property' in Foo) {
Foo
对象被计算为布尔值。null或未定义类型将为false,任何对象将为true。我们还检查键/值对的"键"面,而不是值。从技术上讲,具有键property
是可能的,但对于它具有实际值undefined
。在这种情况下,这将返回false。
一个警告:如果Foo
是另一个值类型:true
, 12
, function()...
,那么第一个条件可能会通过(但我不相信第二个条件会通过)
好的,我想出了一个小函数,它在初始测试中做了我想要的,但我只测试了5分钟,所以可能有错误,如果是,请指出来:
function isDefined(path, namespace) {
if (typeof namespace == 'undefined') {
namespace=global;
// global is the default namespace for NodeJS,
// change this to window if you use it in a browser
}
path=path.split(".");
for (var i=0;i<path.length ;i++)
{
if (typeof namespace[path[i]] == 'undefined') return false;
else namespace=namespace[path[i]];
}
return true;
}
用法:如果你想测试,例如如果test . test1 . test2 . test3 . test4 . test5。Test6已经定义,您可以像这样使用它:
if (isDefined('Test.Test1.Test2.Test3.Test4.Test5.Test6')===true) {
//it is defined
}
- JavaScript类型的、警报和应用
- 在JavaScript类型的函数中避免self-this
- Javascript 类型未定义和 void 之间的区别
- 在Resharper中禁用javascript类型强制警告
- 如何解析 JavaScript 类型 html
- Typeahead的Javascript类型返回未定义
- 在Ruby Slim文件中设置Javascript类型
- 寻找Javascript类型数组仿真库
- JavaScript 类型强制首选项
- JavaScript 类型数组 - 不同的视图 - 2.
- JavaScript 类型数组 - 不同的视图
- JavaScript 类型错误
- 如何处理未定义属性的未定义属性 javascript 类型错误
- Javascript类型转换悖论
- 一种更精致的Javascript类型
- JavaScript 类型注释
- JavaScript 类型参数的有效性
- JavaScript 类型的内存分配
- Javascript 类型错误:oauth 不是构造器
- 奇怪的JavaScript类型转换