gpt4 book ai didi

Javascript Boolean.prototype.toString() 意外结果

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

处理 Mozilla's Javascript Reference使用我的浏览器控制台。查看 boolean 对象。我使用以下方法遇到了意外行为:

Boolean.prototype.toString() Returns a string of either "true" or "false" depending upon the value of the object. Overrides the Object.prototype.toString() method

如果我实例化一个 boolean 值 true 或 false,它们都会从此方法返回相同的“false”:

var t = Boolean(true);
var f = Boolean(false);

Boolean.prototype.toString(t);
> "false"
Boolean.prototype.toString(f);
> "false"

我知道我可以更可靠地查询对象:

Boolean.prototype.constructor(t);
> true
Boolean.prototype.constructor(f);
> false

所以我要问的是:谁能解释为什么 Boolean.prototype.toString(true) 返回 false,最好是举例说明?

是否存在继承问题,或者是一个错误?我没有得到什么吗?我已经使用 boolean 对象包装器、 boolean 文字和表达式对此进行了测试。我已经在 Mac 上的三个浏览器上重现了这种行为,这是平台问题吗?任何帮助理解此行为的信息都将不胜感激。

最佳答案

Boolean.prototype 上的任何内容都会传递给所有 boolean 值。这意味着 true.toString === Boolean.prototype.toString,并且执行 true.toString() 就像执行 Boolean.prototype.toString.call(真)

当你直接调用Boolean.prototype.toString时,this === Boolean.prototype。看着the spec ,我们可以看到它会尝试进行转换,以防您获得 boolean 对象(请记住,Boolean.prototype 实际上是每个 boolean 值的原型(prototype) - 它是一个 boolean 对象):

  1. Else if Type(B) is Object and the value of the [[Class]] internal property of B is "Boolean", then let b be the value of the [[PrimitiveValue]] internal property of B.

[[PrimitiveValue]] 本质上是一个 valueOf 调用:

Boolean.prototype.valueOf(); //false

Boolean.prototype 在规范 (15.6.4) 中定义为 boolean 对象 false

总而言之,这里发生的是,您没有尝试在您想要的变量上调用 toString,而是在 Boolean.prototype 上调用它,它产生相同的结果每次都有结果。

解决方案:不要那样做。在变量上调用 toString:t.toString()f.toString()

注意您不需要 Boolean(true) 或类似的东西;只需 true 即可。

关于Javascript Boolean.prototype.toString() 意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22546958/

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