为什么' true instanceof Boolean'在JavaScript中等于false

时间:2015-04-20 16:46:53

标签: javascript

以下表示表达式“true instanceof Boolean”的计算结果为false。为什么这个表达式会被评估为假?

$(document).ready(function() {
  
  var $result = $('#result');
  
  if(true instanceof Boolean) {
    $result.append('I\'m a Boolean!');
  } else {
    $result.append('I\'m something other than a Boolean!');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="result"></div>

2 个答案:

答案 0 :(得分:12)

true是一个布尔基元 - &#39; s&#34; boolean&#34;用小写&#34; b&#34;。它不是一个对象。

类似地,"hello"不是String的实例,因为字符串原语也不是对象。

您可以使用typeof运算符测试基元类型。

原始值和对象值之间的区别在JavaScript中可能有点混乱,因为当基元像对象引用一样使用时,语言会隐式地将基元包装在适当的对象包装器中。这就是你可以写

的原因
var length = "hello world".length;

该字符串被隐式转换为String实例,以使该.操作起作用。你甚至可以用布尔值来做到这一点:

var trueString = true.toString();

它也会出现在数字中,尽管语法有时会妨碍:

var failure = 2.toString(); // an error
var success = (2).toString(); // works

答案 1 :(得分:-2)

The Boolean object is an object wrapper for a boolean value.

所以布尔值和包装器对象不是一回事。

此外,boolean objects are verboten。换句话说,使用布尔对象并不是一种好的风格。