gpt4 book ai didi

JavaScript 原始类型和对应的对象

转载 作者:可可西里 更新时间:2023-11-01 02:25:22 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com