gpt4 book ai didi

javascript - 检查 javascript 中可用 Prop 或方法的最佳实践?

转载 作者:行者123 更新时间:2023-11-29 10:20:54 25 4
gpt4 key购买 nike

我见过许多检查 javascript 中可用属性或方法的不同方法。

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

if(window.hasOwnProperty("somePropOrMethod")){ }

if("somePropOrMethod" in window){ }

if(!!window.somePropOrMethod) { }

我应该使用哪一个,为什么?这完全取决于个人喜好还是它们之间存在细微差别?

最佳答案

这取决于具体情况,以及您希望测试的严格程度。

  1. 不检查特定对象上是否定义了 somePropOrMethod 属性;它只检查它在继承链中。通常这无关紧要;特别是在 window. 上检查时。然而,它确实检查了“somePropOrMethod”属性不是 undefined

    function Foo() {

    }
    Foo.prototype.bar = 4;
    Foo.prototype.baz = undefined;

    var x = new Foo();

    typeof x.bar​ !== "undefined"; // true, but "x" doesn't actually have a bar attribute; it's in the inheritance chain
    typeof x.baz​ !== "undefined"; // false
  2. 检查特定对象是否拥有属性并从其搜索中排除继承链;但它不会检查 somePropOrMethod 是否未定义。

    window.foo = undefined;
    window.hasOwnProperty("foo"); // true; but it's undefined

    // any properties on window.__proto__ will return false
  3. 与第一个相同,只是它不检查undefined;它只是检查对象是否有一些成员(可能未定义)。

  4. 这会检查对象及其继承链(即#1 和#3 区域),但仅检查真实 值;

    window.foo = false;
    window.bar = 0;
    window.baz = null;

    !!window.foo; // false
    !!window.bar; // false
    !!window.baz; // false

当然,您应该做的是,如果您想要一个方法,您应该检查它是一个函数;

if(typeof window.someMethod​ !== "function"){ } // specifically check for a function

您应该对其他属性(stringnumber 等,甚至使用 instanceof 关键字)执行相同的操作。

关于javascript - 检查 javascript 中可用 Prop 或方法的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12262058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com