gpt4 book ai didi

javascript - `this instanceof String` 和 `"foo"instanceof String` 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 02:37:50 26 4
gpt4 key购买 nike

我正在像这样扩展对象:

Object.prototype.is_a = function (x) {
return this instanceof x;
}

一切正常

"foo".is_a(String) // true
"foo".is_a(Object) // true
"foo".is_a(Array) // false
"foo".is_a(Function) // false
"foo".is_a(Boolean) // false
"foo".is_a(Date) // false
"foo".is_a(Number) // false
"foo".is_a(RegExp) // false

但是,当

"foo" instanceof String // false
is_a() 函数中的

this 关键字与 foo 相同,对吗?为什么返回不同的结果?

最佳答案

首先,您不能将 instanceof 应用于原始值,这就是原因

"foo" instanceof String

返回 false。基元不是对象,因此不能是构造函数的实例。 *

那么为什么它似乎在 is_a 方法内部起作用?

在非严格模式下,函数内this的值is always going to be an object (步骤 3)。如果 this 值不是对象,则它被隐式转换为 1。您可以使用 console.log(typeof this) 进行测试。
这意味着字符串原语 "foo" 被转换为字符串对象 new String("foo") 这就是为什么您可以使用 instanceof在上面。

在严格模式下,this 的值不必是对象,也不会自动转换 (step 1)。在这种情况下,您的方法将失败:

> Object.prototype.is_a = function (x) {
'use strict';
return this instanceof x;
}
> "foo".is_a(String)
false

*:这是一个非常简单的解释。实际上,instanceof 运算符将求值委托(delegate)给构造函数的内部 [[HasInstance]] method。 ,如果传递的值不是对象,则定义为返回 false

关于javascript - `this instanceof String` 和 `"foo"instanceof String` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22157456/

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