JavaScript 原始类型和对应的对象

标签 javascript primitive-types

在 JavaScript 中,并非每个数据都是对象。存在一些原始类型,如字符串、数字和 bool 值,它们不是对象。对于这些类型中的每一种,都存在一个构造函数,它输出具有类似行为的对象:NumberStringBoolean。令人困惑的是,实际上可以调用基本类型的方法——在此操作期间,它们将被转换为相应的对象,然后再转换回来。例如一个人可以做

var a = 4.1324;
a.toFixed(1) // Outputs 4.1

然而,如果您尝试比较原始类型和严格相等的对象,就会发现差异

var a = new Number(4);
var b = 4;
a === b; // False!!!
typeof a; // 'object'
typeof b; // 'number'

实际上,一个人试图比较对象,结果发现它们还是不同的:

var a = new Number(4);
var b = new Number(4);
a === b; // False!!!

(从概念的 Angular 来看,我有点理解这种区别。对象可以有额外的属性,因此它们不应该比较相等,除非它们实际上相同。所以如果我们想要 4 === 4 我们需要使用一个不是对象的类型。但任何足够动态的编程语言都会面临这种困境,但 JavaScript 是我所知道的唯一一种有两种类型的语言 - 一种是对象的,另一种是not - 对于数字或字符串。)

What is the advantage of keeping two separate representations for numbers, strings and Booleans? In what context could one need the distinction between primitive types and objects?

最佳答案

What is the advantage of keeping two separate representations for numbers, strings and Booleans?

性能

In what context could one need the distinction between primitive types and objects?

想到强制。 0 == falsenew Number(0) != false

例如:

var a = new Boolean(false);
if(a) {
  // This code runs
}

但是

var a = false;
if(a) {
  // This code never runs
}

您可以在此处阅读有关强制转换的更多信息: JavaScript Coercion Demystified

关于JavaScript 原始类型和对应的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5183009/

相关文章:

Javascript IndexOf 字符串中的整数不起作用

java - Android 上字符的大小

java - 如何确定原始变量的原始类型?

javascript - Firebase CORS、白名单 IP 范围

javascript - 将数据属性添加到 selectize.js 选项

java - 调用原始类型 int 的构造函数

c# - 扩展原始类型

java - 比较 Java 中的 Long 面临的一些问题

javascript - 所有 chrome.tabs 都出现相同的错误

javascript - Angular2 中的表单对话框