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

All*_*lez 8 javascript

以下表示表达式"true instanceof Boolean"的计算结果为false.为什么这个表达式会被评估为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!');
  }
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="result"></div>
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 13

该值true是布尔基元 - 具有小写"b"的"布尔".它不是一个对象.

同样,"hello"它不是String的实例,因为字符串原语也不是对象.

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

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

var length = "hello world".length;
Run Code Online (Sandbox Code Playgroud)

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

var trueString = true.toString();
Run Code Online (Sandbox Code Playgroud)

它也发生在数字上,虽然语法有时会妨碍:

var failure = 2.toString(); // an error
var success = (2).toString(); // works
Run Code Online (Sandbox Code Playgroud)

  • 好答案!但有点令人困惑,对于那些不太熟悉的人来说,也许可以在代码示例上标记到最后: if (typeof true === "boolean") .... (2认同)