Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Boolean.prototype.toString()意外结果_Javascript_Boolean - Fatal编程技术网

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

Javascript Boolean.prototype.toString()意外结果,javascript,boolean,Javascript,Boolean,使用我的浏览器控制台进行工作。查看布尔对象。我在以下方法中遇到了意外行为: Boolean.prototype.toString() 根据对象的值返回“true”或“false”字符串。重写Object.prototype.toString()方法 如果我实例化布尔值true或false,它们都会从此方法返回相同的“false”: var t = Boolean(true); var f = Boolean(false); Boolean.prototype.toString(t); >

使用我的浏览器控制台进行工作。查看布尔对象。我在以下方法中遇到了意外行为:

Boolean.prototype.toString() 根据对象的值返回“true”或“false”字符串。重写Object.prototype.toString()方法

如果我实例化布尔值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吗


是继承问题,还是bug?我没有得到什么吗?我已经用布尔对象包装器、布尔文本和表达式对此进行了测试。我在Mac上的三个浏览器上复制了这种行为,这是平台问题吗?理解此行为的任何帮助都将不胜感激。

Boolean.prototype.toString()基于其调用的对象的值返回“true”或“false”,而不是使用

因此,您可以获得以下预期结果:

> var t = Boolean(true);
undefined
> var f = Boolean(false);
undefined
> t.toString();
'true'
> f.toString();
'false'
> Boolean.prototype.toString.apply(t);
'true'
> Boolean.prototype.toString.apply(f);
'false'

无论在
Boolean.prototype上的是什么,都会传递给所有Boolean。这意味着
true.toString===Boolean.prototype.toString
,执行
true.toString()
就像执行
Boolean.prototype.toString.call(true)

当您直接调用
Boolean.prototype.toString
时,
this===Boolean.prototype
。看看,我们可以看到,如果你得到一个布尔对象,它会尝试进行转换(记住,
Boolean.prototype
实际上是每个布尔对象的原型,它是一个布尔对象):

  • 否则,如果类型(B)是Object,并且B的[[Class]]内部属性的值是“Boolean”,则将B设为B的[[PrimitiveValue]]内部属性的值
  • [[PrimitiveValue]]本质上是一个
    valueOf
    调用:

    Boolean.prototype.valueOf(); //false
    
    Boolean.prototype
    在spec()中定义为布尔对象
    false

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

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


    注意:您不需要
    布尔值(true)
    或类似值;只要
    true
    就可以了。

    我不确定是否理解,
    Boolean.prototype.toString()
    返回false,当您将布尔值作为参数传递时,为什么它会返回其他值?如果您需要字符串do
    t.toString()
    Boolean.prototype.toString.call(t)
    我现在就知道了,谢谢,文档中有漏洞吗?如果有,我要编辑Mozilla页面?不文档中没有漏洞,当你想在一个对象上使用一个方法时,原型通常不是你所使用的,所以你从来没有真正做过
    Boolean.prototype.constructor(t),因为这在任何地方都不起作用nothing@TonyCronin文档很好
    Boolean.prototype.toString
    指的是布尔型的
    toString
    属性<代码>布尔值。原型恰好是其中之一。