如果我需要检查对象是否可用,javascript中哪一个更好';在';或obj.key的类型!==&引用;“未定义”;

如果我需要检查对象是否可用,javascript中哪一个更好';在';或obj.key的类型!==&引用;“未定义”;,javascript,window,javascript-objects,typeof,navigator,Javascript,Window,Javascript Objects,Typeof,Navigator,我需要检查对象中是否有子对象可用。 让父对象为window,子对象为navigator。 有多种方法可以做到这一点 窗口中的“导航器” typeof window.navigator!==“未定义” 哪一个是最理想的方法呢 你的意思是什么 是否要检查对象是否为其他对象的所有者或实例 'navigator' in window different with typeof window.navigator !== "undefined" 若你们想查看,你们最好使用窗口中的导航器吗 typeof

我需要检查对象中是否有子对象可用。 让父对象为
window
,子对象为
navigator
。 有多种方法可以做到这一点

  • 窗口中的“导航器”
  • typeof window.navigator!==“未定义”
  • 哪一个是最理想的方法呢

    你的意思是什么

    是否要检查对象是否为其他对象的所有者或实例

    'navigator' in window different with typeof window.navigator !== "undefined"
    
    若你们想查看,你们最好使用窗口中的导航器吗

     typeof window.navigator !== "undefined"   //safety
    
    如果要查看实例,最好使用关键字instance of

    注意

    你不应该使用

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

    如果是对象,则以下四种方法应具有相同的时间复杂度:

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

    1.在第一种情况下,如果您将navigator作为变量进行检查”

    并且未声明navigator变量,您的代码将导致错误。但是,如果将其作为窗口的参数进行检查,例如:

    if(window.navigator)
    
    您不会得到错误,检查结果将为Undefined=>false(因为您在“if”语句中将其转换为布尔值)。请记住,如果变量为null,if语句也将导致false

    2.使用第二种语法,您可以准确地检查您在问题中提到的内容。 “我需要检查对象中是否有子对象。”


    总之,我建议你的问题采用第二种方法。

    其实并不重要,如果(window.navigator),你甚至可以使用
    ,但这都是基于意见的,我更喜欢1,只是因为它比较短。你说,
    “window
    中的“navigator”与
    window.navigator的类型不同!==”未定义“
    这是怎么回事?第一种方法不是
    if(导航器)
    if(window.navigator)
    。它是
    如果('navigator'在窗口中)
    if(window.navigator)