var s = ne-6ren">
gpt4 book ai didi

javascript - 字符串文字是否是对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:39:18 25 4
gpt4 key购买 nike

努力让我的 JavaSscript 基础扎实。所以问题是关于字符串文字。它们不是对象吗?如果您的回答是"is",那么我的问题是为什么 instanceof 返回 false

> var s = new String
> s.constructor.toString()
function String() { [native code] }

> typeof s
object

> s instanceof String
true

> s instanceof Object
true

> s instanceof Number
false

到目前为止一切顺利。

> typeof 'c'
string

> 'c' instanceof Object
false

> 'c' instanceof String
false

> 'c'.length
1

> 'c'.charAt(0)
c

> 'c'.constructor.toString()
function String() { [native code] }

最佳答案

字符串文字是原语 ( String values ), String objects可以用 String constructor 创建在 new 表达式中:

"foo" instanceof String // false

new String("foo") instanceof String // true

编辑 似乎令人困惑(通过查看已接受的答案 here ),您仍然可以访问定义在 原型(prototype)对象 上的属性原始值,例如:

"foo".indexOf == String.prototype.indexOf // true
"foo".match == String.prototype.match // true
String.prototype.test = true;
"foo".test // true
true.toString == Boolean.prototype.toString
(3).toFixed == Number.prototype.toFixed // true
// etc...

原因取决于 Property Accessors 、点符号 . 和括号符号 [].

让我们看一下 ECMA-262 规范中的算法:

产生式 MemberExpression : MemberExpression [ Expression ](或 MemberExpression . Identifier)的计算如下:

  1. 评估 MemberExpression

  2. 调用 GetValue(Result(1))

  3. 评估表达式。

  4. 调用 GetValue(Result(3))

  5. 调用 ToObject(Result(2))

  6. 调用 ToString(Result(4))

  7. 返回一个 Reference 类型的值,其基础对象为 Result(5),其属性名称为 Result(6)

第 5 步中,ToObject内部运算符将 MemberExpression 类型转换为对象,具体取决于它的类型。

基元会在不知不觉中转换为对象,这就是您可以访问原型(prototype)上定义的属性的原因。

关于javascript - 字符串文字是否是对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2018070/

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