如果我需要检查对象是否可用,哪一个更好。 'in'or typeof obj.key!==“undefined”

如果我需要检查对象是否可用,哪一个更好。 'in'or typeof obj.key!==“undefined”

问题描述:

我需要检查一个对象中是否有子对象可用。 让父对象为window,子对象为navigator。 可能有多种方式来做到这一点。如果我需要检查对象是否可用,哪一个更好。 'in'or typeof obj.key!==“undefined”

  1. 'navigator' in window
  2. typeof window.navigator !== "undefined"

哪一个会是理想的方式做到这一点。

+5

真的没关系,你甚至可以做'if(window.navigator)',但它都是基于意见的 – adeneo

+0

我更喜欢1,只因为它更短 –

你的意思是?要检查

做另一个对象的对象所有者或实例?

'navigator' in window different with typeof window.navigator !== "undefined" 
如果你想检查

,确实Navigator在窗口中,您最好使用

typeof window.navigator !== "undefined" //safety 

,如果你想查询的实例,你最好使用关键字

实例

关注

你不应该使用

if (variable) //do something, because it's not safety. 
+0

你说,窗口中的'navigator'是用'typeof运算window.navigator不同!== “未定义”' 这是怎么回事? – GetGimphed

如果它是一个对象,下面四个方法应具有相同的时间复杂度:

if('navigator' in window){...} 

if(typeof window.navigator !== "undefined"){...} 

if(window.navigator){...} 

if(window.hasOwnProperty('navigator')){...} 

1.In第一种方式,如果你检查导航作为一个变量”

if(navigator) 

并且未声明导航器变量,您的代码将导致错误。但是,如果你你选择了它,例如窗口的参数,如:

if(window.navigator) 

你不会得到一个错误,你的支票将导致以undefinded =>假的(因为你将其转换为“如果里面布尔“声明)。重要的是要记住,如果变量为null,if语句也会导致false。

2.采用第二语法您检查正是你在你的问题提什么。 “我需要检查一个对象中是否有子对象可用。”

最后,我会建议你的问题的第二种方式。

+1

第一种方法不是'if(navigator)'或'if(window.navigator)'。它是'if('navigator'in window)'。 – GetGimphed