JS中数值类型已经可以使用Number方法,为什么还要引入Number对象概念呢?也就是说:
var n1 = 10;
var n2 = new Number(10)
n1 和 n2的区别在哪里呢,二者都可以:
n1.toString()
n2.toString()
结果都一样。
除了typeof不同。
另外Number.isInteger(n1) 返回true
而Number.isInteger(n2)却返回false,Number.isInteger()不是对象方法吗,怎么反而是false?
拜托高手帮忙解答,多谢了
typeof 不同就已经说明了问题,typeof(n2) 是一个对象Object,它并不代表一个纯数值类型,而Number.isInteger()仅用来确定传递的值是否为整数,
对象传递进入参数,那么返回false便是很合理的了。
Number作为一个对象,对象可以提供很多有效的功能,
你还是先去复习什么是对象,什么是类,什么是类型
你现在这些概念整个都混在一起
new Number(10)是实例化一个Number类,并给构造函数传参,值是10
而n1=10是将n1赋值一个Integer类型的常量,值是10
Number是个类,根本就不是个方法
Number是一个对象,在javascript里是原始数值的包装对象。isInteger()这个方法貌似不支持转入对象,这比较鸡肋。
个人理解
n1是一个基本数据类型 数字
n2是一个Number对象 对象
Number本身就是一个函数
所以调用Number.isInteger(这里传入Number对象)所以返回false
var n1 = 10; 是直接申明一个变量,值为10
var n2 = new Number(10) 是申明一个对象,两个不完全一样,Number.isInteger()函数用于检查传递给它的值是否为整数,而不是对象是否为整数
n1是一个基本数据类型的数字
n2是一个Number对象,这两个一个是对象,一个是变量,两个完全不一样。
Number.isInteger() 方法用来判断给定的参数是否为整数,n2是对象,对象不是整数,所以false。
查书后现在搞明白了,关键点在于关键词new, 其为生成类的实例对象,可以获得类的属性和方法,但JS的设计者将数值和数值变量都视为Number对象,可以得到Number()类的属性和方法,在string类型也一样,JS中没有方法的数据类型只有null和undefined。这样的设计给开发带来便利但使初学者产生困惑。感觉new以后的糖越嚼越甜。