JavaScript什么是包装对象

<script>
        var str = 'hello';
        // 1、首先我们测一下str的数据类型
        alert(typeof str); // string 字符串类型
        /* * * * * * * * * * * * * * * * * * * * * * * * * * *
         * 既然是字符串类型,为什么又会有方法呢?               
         * 我们知道方法前面必须是对象,也就是对象才有方法       
         * 基本类型是不能拥有方法的                          
         * 如果要是有方法的话,那么在源码当中应该怎么写?       
         * 我们此前都知道方法应该写在构造函数对应的原型下面     
         * * * * * * * * * * * * * * * * * * * * * * * * * * */
        str.charAt(0);
        str.indexOf('e')
</script>

今天我们聊聊基本类型为何会有方法,原型当中是如何设计的?
这就涉及到我们今天说的内容 包装对象

包装对象 :基本类型有自己对应的包赚对象,但是null和indefine是没有包装对象的
基本类型有:字符串 数字 布尔值 null undefine
字符串的包装对象是 String
数字的包装对象是 Number
布尔值的包装对象是 Boolean

        var str = new String('hello'); //通过new创建的肯定都是对象
        alert(typeof str); // Object 对象
        // 既然是对象,下面有方法也就是正常的
        alert( str.charAt(1) ); // e
        // 源码当中是这样设计的
        String.prototype.charAt = function() {

        }

基本类型会找到对应的包装对象类型,然后包装对象把所有的属性和方法给了基本类型,然后包装对象消失

        // var str = 'hello';
        // str.charAt(0); // 基本类型会找到对应的包装对象类型,然后包装对象把所有的属性和方法给了基本类型,然后包装对象消失

        // 如果说要给一个字符串添加方法的话,我们应该如何操作呢
        var str = 'hello';
        // 比如我要写一个lastValue()方法,去找字符串后面最后一个字符
        // 写到包装对象的原型下面
        String.prototype.lastValue = function () {
          return this.charAt(this.length -1);
        };
        alert( str.lastValue() ); //弹出 o

关于包装对象的相关面试题
请问下列代码弹出什么?

var str = 'hello';
str.number = 10; 
alert( str.number ); 

答案:undefine
解析:

       var str = 'hello';
       str.number = 10; //在基本类型的包装对象下面创建一个对象
       alert( str.number ); //undefine
       // 为什么会显示undefine呢?
       // 首先走var str = 'hello';的时候没有问题,str就是个基本类型
       // 走str.number = 10;的时候,这个基本类型要添加一个属性,
       // 它就会这个基本类型所对应的包装对象下面去创建一个对象,
       // 然后把这个10添加到对象下面,然后添加之后这个包装对象就消失了,
       // 消失之后当我们再去调用str.number的时候,这个时候str.number又重新创建了一个对象,
       // 这个对象和刚才添加的对象并不是同一个对象,因为包装对象消失了,他就会形成一个新的对象,
       // 这样的话,这个新的对象下面是没有的,所以是undefind
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值