作为JS面试题中经常被问到的考点,怎么能不好好了解+理解呢?或许标题中的名词我们不是很了解,但是我相信我们一定都实践过,而且不止一次,只不过当时我们或许停留在使用的层次,没有深入了解原理,在此之前的我也是这样的。不过学习知识,果真是“N+1”模式!
相信大家还记得C#中定义一个字符串 string s1="雨田";但是有些时候我们会见到String这个字符串的类;然后傻傻的分不清楚了;现在看来的话,应该是默认封装了一个String类,然后封装了针对此类的各种操作API函数,这也是为什么我们可以(s1.函数名(参数))的原因,不过C#这门语言中究竟是怎么使用的,我还真没去了解;不过自以为应该和JS(今天聊的)差不多,所以直接进入正题。
什么是内置对象呢?
定义:ES标准中规定的,浏览器厂商已经实现的对象(首字母大写);
包括:【String、Number、Boolean】、【Array、Date、Math、RegExp】、【Error】、【Function、Object】、【Global】;
当然如果这样聊的话,确实没有深入挖掘的知识点,不过看“标题”-包装类型,这才是本篇博客的核心知识点。
什么是包装类型?
定义:专门封装原始类型的值,并提供操作原始类型值的API;
PS:原始类型就是自定义的字符串、数字、True/False;
包括:【String、Number、Boolean】;
为什么:原始类型的值本身不具有任何功能;
何时发挥作用:试图对原始类型的值调用函数时,引擎会自动创建对应类型的包装类型对象
1:封装原始类型的值;2:调用包装类型中方法操作原始类型;
单靠理论性的文字说破天也不好明白,不妨写一个例子,咱们一块来了解下
var str="雨田";声明一个字符串类型
str.Height=183;//换做C#,一定不会点出这种方法,其实JS中也没有,不过确可以人为定义,当做属性使用;
//过程解析:
//1:试图对原始类型的值调用任何函数时,也就是str.Height
//2:判断原始类型的类型名,也就是type of str,也就是字符串类型
//3:自动创建对象的字符串包装类型对象,其中保存要操作的原始类型的值
//4:调用包装类型对象(String)中提前定义好的API,这里.Height不属于提前定义好的,所以默认在 String中添加.Height这个API;
//5:API被调用后,包装类型String会自动释放,刚添加的.Height这个API也就一块走了;
console.log(str.Height);
//过程解析:
//1:试图对原始类型的值调用任何函数时,也就是str.Height
//2:判断原始类型的类型名,也就是type of str,也就是字符串类型
//3:“重新”自动创建对象的字符串包装类型对象,其中保存要操作的原始类型的值
//4:正因为String包装类型中不存在,所以输出“未定义”这个提示
//结果:
Underfined//表示未定义
//相信大家可能会和我一样以为输出10,但是不尽人意,那么该过程究竟做了一个什么事情呢?详见代码解析,简简单单三行代码竟然做了两次创建包装类型对象;
------------------------------------------- 然后咱们再来回顾,之前使用过的字符串转换为大写的函数-----------------------------------------
var unicode="YuTian".toUpperCase();
//代码解析
//1:代码还原为var unicode=new String("YuTian").toUpperCase();
//2:做完此函数操作后,然后赋值给Unicode,这里是格外注意的地方
//3:(2)中的操作同样诠释了为什么针对字符串操作后,不改变原字符串的值,而需要重新进行赋值。
/*-------------------------------------------------------------------------------------*/
//既然说到这里,咱们一块来改改上面那个例子的代码吧!详细大家一定有了思路了
var str=new String("雨田");
//这里再创建完包类型后,将地址存放在str中,保证不会被回收;
str.height=183;
//过程见实例一的解析
console.lot(str.money);
//保存的是刚刚未被回收的包类型的Height这个API函数;
以上就是本篇博客的核心知识点,浏览以及阅读的博友,记得留言、点赞、转发 一条龙吆!下篇博客更精彩........