gpt4 book ai didi

javascript - 为什么不能在 instanceof HTMLInputElement 上使用 "hasOwnProperty"?

转载 作者:行者123 更新时间:2023-12-03 22:34:32 25 4
gpt4 key购买 nike

我想检查输入元素是复选框还是文本类型。

我知道我可以这样做:

//Type of input..
if ( input.type === "checkbox" )
//Contains the property..
if ( "checked" in input )

但我的问题是:为什么 hasOwnProperty返回假?

我只想使用:
input.hasOwnProperty("checked")

但它每次都返回false。

不是 input一个东西?
我不这么认为,但是 typeof说是:
typeof input // returns "object" 

那么发生了什么?!

代码示例:

const input = document.querySelector("input")
if ( input instanceof HTMLInputElement ) {
console.dir(input);
console.info(typeof input);
console.log("with 'hasOwnProperty'",input.hasOwnProperty("checked"));
console.log("with 'in'","checked" in input);
console.log("with 'type'",input.type === "checkbox");
}
<input type="checkbox" />


The documentation about HTMLInputElement ,只有类型复选框具有属性 checked :

最佳答案

"checked" in input返回 true因为in评估所有可枚举的属性。相反,.hasOwnProperty()将返回 true仅当属性是对象本身的成员时。它返回 false如果它是继承的或对象的 prototype 的成员.

在这种情况下,checkedgetterHTMLInputElement.prototype ,不是 input 的成员.

const checkbox = document.getElementById("c");
const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'checked');

console.log("'checked' is property of input:", "checked" in checkbox);
console.log("'checked' is own-property of input:", checkbox.hasOwnProperty("checked"));
console.log("'checked' is member of prototype:", HTMLInputElement.prototype.hasOwnProperty("checked"));
console.log("'checked' is getter:", descriptor.get !== undefined);
<input type="checkbox" id="c">

关于javascript - 为什么不能在 instanceof HTMLInputElement 上使用 "hasOwnProperty"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696773/

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