如何检查JavaScript中的对象属性是否未定义?
当前回答
我假设您还想检查它是否未定义或为空。如果是,我建议:
myVar==空
这是唯一一次双等于非常有用,因为当myVar未定义或为null时,它将求值为true,但当它是其他假值(如0、false、“”和NaN)时,它会求值为false。
这是Lodash的isNil方法的实际源代码。
其他回答
如果你这样做
if (myvar == undefined )
{
alert('var does not exists or is not initialized');
}
当变量myvar不存在时,它将失败,因为没有定义myvar,所以脚本被破坏,测试没有效果。
由于窗口对象在函数外部具有全局作用域(默认对象),因此声明将“附加”到窗口对象。
例如:
var myvar = 'test';
全局变量myvar与window.myvar或window['myvar']相同
为了避免在存在全局变量时要测试的错误,最好使用:
if(window.myvar == undefined )
{
alert('var does not exists or is not initialized');
}
一个变量是否真的存在并不重要,它的值是不正确的。否则,用undefined初始化变量是愚蠢的,最好使用值false来初始化。当你知道你声明的所有变量都是用false初始化的时候,你可以简单地检查它的类型或者依赖它!window.myvar检查它是否具有正确/有效的值。因此,即使没有定义变量!window.myvar对于myvar=undefined或myvar=false或myvar=0是相同的。
如果需要特定类型,请测试变量的类型。要加快测试条件,您最好执行以下操作:
if( !window.myvar || typeof window.myvar != 'string' )
{
alert('var does not exists or is not type of string');
}
当第一个简单条件为真时,解释器将跳过下一个测试。
最好使用变量的实例/对象来检查它是否获得了有效值。它更稳定,是一种更好的编程方式。
(y)
使用动态变量的版本你知道吗?
var boo='Ala';函数检查(){if(this['fo']){console.log('o is here');}其他{console.log('没有foo');}如果(这个['bo']){console.log('boo在这里');}其他{console.log('没有boo');}}check();
问题归结为三种情况:
对象具有属性,其值未定义。对象具有属性,其值未定义。对象没有属性。
这告诉了我们一些我认为重要的事情:
未定义成员和具有未定义值的已定义成员之间存在差异。
但不幸的是,obj.foo的类型并不能告诉我们这三种情况中的哪一种。然而,我们可以将其与obj中的“foo”结合起来,以区分情况。
| typeof obj.x === 'undefined' | !("x" in obj)
1. { x:1 } | false | false
2. { x : (function(){})() } | true | false
3. {} | true | true
值得注意的是,这些测试对于空条目也是相同的
| typeof obj.x === 'undefined' | !("x" in obj)
{ x:null } | false | false
我认为,在某些情况下,检查属性是否存在比检查是否未定义更有意义(而且更清楚),而这种检查唯一不同的情况是情况2,这是对象中实际条目具有未定义值的罕见情况。
例如:我刚刚重构了一堆代码,这些代码对对象是否具有给定属性进行了大量检查。
if( typeof blob.x != 'undefined' ) { fn(blob.x); }
如果不检查未定义,则更清楚。
if( "x" in blob ) { fn(blob.x); }
但正如前面提到的,这些并不完全相同(但已经足够满足我的需求)。
所有答案都不完整。这是了解存在“定义为未定义”属性的正确方法:
var hasUndefinedProperty = function hasUndefinedProperty(obj, prop){
return ((prop in obj) && (typeof obj[prop] == 'undefined'));
};
例子:
var a = { b : 1, e : null };
a.c = a.d;
hasUndefinedProperty(a, 'b'); // false: b is defined as 1
hasUndefinedProperty(a, 'c'); // true: c is defined as undefined
hasUndefinedProperty(a, 'd'); // false: d is undefined
hasUndefinedProperty(a, 'e'); // false: e is defined as null
// And now...
delete a.c ;
hasUndefinedProperty(a, 'c'); // false: c is undefined
遗憾的是,这是正确的答案,却被错误的答案所掩盖>_<
所以,对于任何路过的人,我会免费给你未定义的!!
var undefined ; undefined ; // undefined
({}).a ; // undefined
[].a ; // undefined
''.a ; // undefined
(function(){}()) ; // undefined
void(0) ; // undefined
eval() ; // undefined
1..a ; // undefined
/a/.a ; // undefined
(true).a ; // undefined
"propertyName" in obj //-> true | false
推荐文章
- 如何为Firebase构建云函数,以便从多个文件部署多个函数?
- 如何发送推送通知到web浏览器?
- AngularJS:工厂和服务?
- js:将一个组件包装成另一个组件
- 父ng-repeat从子ng-repeat的访问索引
- JSHint和jQuery: '$'没有定义
- 模仿JavaScript中的集合?
- 用JavaScript验证电话号码
- 如何在HTML5中改变视频的播放速度?
- 谷歌地图API v3:我可以setZoom后fitBounds?
- ES6/2015中的null安全属性访问(和条件赋值)
- 与push()相反;
- JS字符串“+”vs concat方法
- AngularJS使用ng-class切换类
- 访问Handlebars.js每次循环范围之外的变量