js中的数据类型包括基础数据类型(number、string、boolean、null、undefined)和复合(引用)数据类型(Object—>包括Array、function、Data等)
其中基础数据类型的 boolean、number、string又称为包装类型。当 Number() 和运算符 new 一起作为构造函数使用时,它返回一个新创建的 Number 对象。如果不用 new 运算符,把 Number() 作为一个函数来调用,它将把自己的参数转换成一个原始的数值,并且返回这个值(如果转换失败,则返回 NaN)。
包装类型与原始类型之间的转换方式如下:
- 原始->包装: new Number(123)
- 包装->原始: (new Number(123)).valueOf()
valueOf() 是 Object 的原型方法,它定义在 Object.prototype 对象上,所有 Object 的实例对象都会继承 valueOf() 方法。valueOf() 方法能够返回对象的值。JavaScript 自动类型转换时会默认调用 valueOf() 原型方法。Object 对象默认 valueOf() 方法返回值与 toString() 方法返回值相同,但是部分类型对象重写了 valueOf() 方法。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
let num1 = Number(12)
let num2 = new Number(12)
let num3 = 12
console.log(typeof num1,typeof num2) //number object
console.log(num1===num3) //true
console.log(num1===num2) //false
console.log(typeof num2.valueOf()) //number
</script>
</body>
</html>
小知识:
1、Number(1)是指将1转化为number类型,跟1是全等关系。Number(1)是把1转换为数字类型,new Number(1)是把 1 包装成了一个对象。
2、一个原始类型值并没有任何可用的方法,其使用的方法是包装对象原型上的,例如:(12).toFixed(),toFixed()实际上是在Number对象原型(prototype)中声明的方法。