原始值调用方法问题

"Hello World, Hello Blog"

Posted by wudimingwo on December 15, 2018

js原始值主要有 string,number,boolean,null,undefined;

现在考虑一下下面的情况不报错的是哪一种.

1
2
3
4
5
            var num = 123.toString();//报错
            var boo = false.toString();
            var str = 'str'.toString();
            var _null = null.toString();//报错
            var _undefined = undefined.toString();//报错

我们知道用 . 的方式调用方法, 调用的应该是构造函数原型链上的方法, 换言之,能够调用方法的一般是对象.

按照常识,上述原始值既然都不是对象,那么不应该能调用方法. 但boolean和str的原始值都可以调用该方法. 很明显应该和包装对象有关.

此处希望有大神可以解答. 我目前的理解是, null和undefined是没有构造函数的. number类型数据生成的时候,应该也没有通过构造函数

而string,boolean的所有数据都是通过构造函数生成的.

再看下面的一组,猜一猜哪个会报错

1
2
3
4
5
6
7
8
9
10
            var num = 123;
                num.toString();// 不报错
            var boo = false;
                boo.toString();//不报错
            var str = 'str';
                str.toString();//不报错
            var _null = null;
                _null.toString();//报错
            var _undefined = undefined;
                _undefined.toString();//报错

跟第一组相比, num竟然不报错,可以调用包装类上的方法了.

也就是说,num 进行赋值的时候, 是存在包装类的参与的. (也就是说用变量接收是有很多好处的)

关于包装类的工作机制,如果有大神看到还请解答一二.