Ton*_*nin 4 javascript boolean
使用我的浏览器控制台完成Mozilla的Javascript参考.看着布尔对象.我通过以下方法遇到了意外行为:
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"
Run Code Online (Sandbox Code Playgroud)
我知道我可以更可靠地查询对象:
Boolean.prototype.constructor(t);
> true
Boolean.prototype.constructor(f);
> false
Run Code Online (Sandbox Code Playgroud)
所以我要问的是:任何人都可以解释,最好是用例子,为什么 Boolean.prototype.toString(true)返回false?
是继承问题还是错误?我没有得到什么吗?我用布尔对象包装器,布尔文字和表达式测试了这个.我在Mac上的三个浏览器上重现了这种行为,这是一个平台问题吗?我们将非常感谢您对此行为的任何帮助.
无论什么Boolean.prototype都传递给所有布尔人.这意味着true.toString === Boolean.prototype.toString,做true.toString()就像做Boolean.prototype.toString.call(true).
当你Boolean.prototype.toString直接打电话时this === Boolean.prototype.看一下这个规范,我们可以看到它试图在你得到一个布尔对象的情况下进行转换(记住,Boolean.prototype实际上是每个布尔值的原型 - 它是一个布尔对象):
- 否则,如果Type(B)是Object并且B的[[Class]]内部属性的值是"Boolean",则令b为B的[[PrimitiveValue]]内部属性的值.
[[PrimitiveValue]]本质上是一个valueOf电话:
Boolean.prototype.valueOf(); //false
Run Code Online (Sandbox Code Playgroud)
并且Boolean.prototype在规范(15.6.4)中定义为布尔对象false.
总之,这里发生的事情是,不是试图调用toString你想要的变量,而是调用它Boolean.prototype,每次产生相同的结果.
解决方案:不要那样做.调用toString变量:t.toString(),f.toString()
NB你不需要Boolean(true)或喜欢; 只true会这样做.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |