gpt4 book ai didi

javascript - 在 javascript 中丢失了 "constructor.name"的输出

转载 作者:搜寻专家 更新时间:2023-11-01 04:30:05 25 4
gpt4 key购买 nike

我有一个类似的条件需要检查 String 类型构造函数名称是 "String" 还是 "string"

我迷失了以下 JS 代码的输出:

(typeof([].constructor.name)).constructor.name
"String"

typeof([].constructor.name).constructor.name
"string"

但是当我测试以下代码的输出时,我变得更加困惑:

(typeof([].constructor.name))
"string"

typeof([].constructor.name)
"string"

"string".constructor.name
"String"

根据我的理解,输出应该始终是“String”。

任何人都可以对我遗漏的内容或上面的代码出了什么问题提出一些亮点吗?

最佳答案

一个可能的原因

在玩控制台之后我发现了以下内容,似乎 typeof(a).b 可能等同于 typeof (a).b 所以它看起来像以下是等价的

(typeof([].constructor.name)).constructor.name
(typeof [].constructor.name).constructor.name

然而,对于第二个示例,似乎执行了以下内容

typeof([].constructor.name).constructor.name
typeof ([].constructor.name).constructor.name

第一个例子中的第二个括号充当分组运算符,这可能是奇怪结果的原因

关于"string""String"

您可能已经知道,我们可以通过name 属性访问命名函数的名称

function A(){}
A.name // A

此外,当您在幕后创建一个函数时,会创建一个对象,该对象可通过函数的 prototype 属性访问,该对象通过其 constructor 引用函数本身> 属性(property)

function A(){}
A.prototype // {constructor: A}
A.prototype.constructor === A // true

每当你创建一个函数的“实例”时,它隐藏的 [[Prototype]] 属性(又名 __proto__)指向构造函数的原型(prototype),所以

[].__proto__ === Array.prototype // true

由于空数组没有定义constructor 属性,JS 在__proto__ 指向的对象中查找,如上所示,空数组是Array.prototype 因此具有 constructor 属性

[].constructor === Array // true

从这里开始,操作数的分辨率变得微不足道

[].constructor.name // "Array"
[].constructor.name.constructor === String // true
[].constructor.name.constructor.name // "String", i.e. the name of the `function String() {}`

所以在你的例子中

(typeof [].constructor.name).constructor.name
// evaluated to
(typeof "Array").constructor.name
// evaluated to
"string".constructor.name
// evaluated to
String.name
// evaluated to
"String"

第二个例子

typeof ([].constructor.name).constructor.name
// evaluated to
typeof "String"
// evaluated to
"string"

故事的寓意:使用typeof operator而不是 typeof()

关于javascript - 在 javascript 中丢失了 "constructor.name"的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37476149/

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