js原始值主要有 string,number,boolean,null,undefined;
现在考虑一下下面的情况不报错的是哪一种.
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的所有数据都是通过构造函数生成的.
再看下面的一组,猜一猜哪个会报错
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 进行赋值的时候, 是存在包装类的参与的.
(也就是说用变量接收是有很多好处的)
关于包装类的工作机制,如果有大神看到还请解答一二.