首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么新的数字(8)不完全等于8?

为什么新的数字(8)不完全等于8?
EN

Stack Overflow用户
提问于 2015-11-13 15:23:25
回答 5查看 102关注 0票数 2

警报返回假而不是真?因为类型是x和y的数字,并且根据===的文档,它严格比较检查类型和值。

代码语言:javascript
复制
var x=8;
var y=new Number(8);
alert(typeof x);
alert(y===x);//false

PS :对于JavaScript来说还是个新手,还在理解基本概念。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-11-13 16:44:54

布尔、数字和字符串的基元类型都有相应的对象表示,可以通过new Booleannew String等创建对象表示。正如我已经指出的那样,这些类型返回对象。对象与数字是不同的数据类型,因此严格比较将返回false

但是,这些构造函数并没有被广泛使用,因为,正如您所发现的,它们不适合使用原语。封装与原语数字值相同的值的Number对象(严格地)不等于所述原语值。

您可能经常看到的是在没有Number的情况下使用new函数。如果没有new调用,Number只执行类型转换,转换为原语数字值。

那么,为什么我们有NumberStringBoolean对象呢?

事实证明,你一直在使用这样的对象,而且(可能)不知道,例如当你这么做的时候。

代码语言:javascript
复制
"primitive".substring(0, 5)

在JavaScript中,只有对象才能具有属性。基元值不能具有属性。然而,您可以调用substring方法,就好像它是值的属性一样。那是因为JavaScript做了一些叫做自动装箱的事情。当您试图使用像对象这样的原语值时(例如,通过访问属性),JavaScript在内部将原语临时转换为其等效的对象版本。

票数 2
EN

Stack Overflow用户

发布于 2015-11-13 15:27:04

这是因为当使用new实例化时,类型是object,即使该对象的名称是Number。

代码语言:javascript
复制
typeof y === "object"
票数 1
EN

Stack Overflow用户

发布于 2015-11-13 15:27:32

Y是一个对象,而不是一个数字。新关键字引用对象。所以y是一个值为8的数字对象。

试试alert(typeof y);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33696067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档